【问题标题】:getting index value 0 from dataview any list itemtap from sencha touch从数据视图获取索引值 0 来自 sencha touch 的任何列表 itemtap
【发布时间】:2013-08-13 10:14:28
【问题描述】:

我无法从数据视图中获取索引值:

    {          
              xtype: 'list', 
              itemId: 'catList',
              store: 'CategoryStore',    

             scrollable: false,
              layout: 'fit',          
              itemHeight: 20,
              itemTpl: [
              '<div>',
              '<tpl for="data">',
              '<span >{category_name}</span> ',             
          '</tpl>',
          '</div>'],
listeners: {
   'itemtap': function(list, index, target, record, e, eOpts){
     console.log(record.get('cat_id'));
}
}
}

已编辑: 如果我将数据静态存储在存储中,它可以正常工作,但在从服务器获取数据时它不起作用:

它的工作方式与列表中显示的一样:

      {    
          xtype: 'list', 
          itemId: 'catList',
          scrollable: false,

    data: [
    { category_name: 'A', cat_id: 1},
    { category_name: 'B', cat_id: 2},
    { category_name: 'C', cat_id: 3},
    { category_name: 'D', cat_id: 4},
    { category_name: 'E', cat_id: 5},


    ],
    loadingText: "Loading Words...",
    emptyText: '<div>{message}</div>',
    autoLoad:true,
    itemTpl:[
    '<tpl for=".">',
          '<span >{category_name}</span> ',             
      '</tpl>',
    ] 
  },

在这里,我在不同的行上点击了很多次,但只得到索引 0,这是为什么呢?为什么我在点击列表项的不同行时没有得到不同的索引值;

My JSON

【问题讨论】:

  • 您能否向我们提供有关您在此处尝试显示的数据类型的更多信息(例如 json?)对我来说,听起来您只显示一个您正在迭代多次的项目并在您的跨度内显示您的行..
  • 这里,如果我点击类别名称,那么我想获取索引值并希望获得索引的 cat_id 帮助。所以最后,我的意图是根据cat_id获取数据。
  • @Google_Android_Lovers 查看我的更新

标签: sencha-touch sencha-touch-2 dataview


【解决方案1】:

我尝试过并为我完美地工作,让我分享一下我所做的。

型号

Ext.define('Myapp.model.Category', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            { name: 'cat_id', type: 'integer' },
            { name: 'category_name', type: 'string' },
            { name: 'created_date', type: 'string' },
            { name: 'order', type: 'integer' },
            { name: 'status', type: 'integer' },
            { name: 'deleted', type: 'integer' },
            { name: 'type', type: 'integer' }
        ]
    }
});

商店

Ext.define('Myapp.store.Category', {
    extend: 'Ext.data.Store',
    requires: [
        'Myapp.model.Category'
    ],
    config: {
        storeId: 'category',
         model: "Myapp.model.Category",
         proxy: {
            type: "ajax",
            url : "http://alucio.com.np/trunk/dev/sillydic/admin/api/word/categories/SDSILLYTOKEN/650773253e7f157a93c53d47a866204dedc7c363?_dc=1376475408437&page=1&start=0&limit=25",
            reader: {
                type: "json",
                rootProperty: "data"
            }
        },
        autoLoad: true
    }

});

列表

 {          
    xtype: 'list', 
    itemId: 'catList',
    store: Ext.create('Myapp.store.Category'),
    layout: 'fit',      
    itemHeight: 20,
    itemTpl: [
              '<div>',
              '{category_name}',             
              '</div>'],
            listeners: {
               itemtap: function(list, index, target, record, e, eOpts){
                 console.log(record.get('cat_id'));
            } 
     } 
  }

输出

如您所见,itemtap 函数也打印正确的 cat_id

更新

根据您的评论

{    
   xtype :'panel',
   items : [{
       xtype : 'toolbar',
       itemId: 'categoryName'  // Give itemId  
      },
      {
       xtype: 'list', 
       itemId: 'catList',
       height : '100%',
       store: Ext.create('GoodNews.store.Category'),
       layout: 'fit',      
       itemHeight: 20,
       itemTpl: [
         '<div>',
         '{category_name}',             
         '</div>'],
         listeners: {
           itemtap: function(list, index, target, record, e, eOpts){
             var catId = record.get('cat_id');
             var categoryName = record.get('category_name');
             // Set the title like this
             this.getParent().getComponent('categoryName').setTitle(categoryName);
           } 
         }                
       }]     

 }

【讨论】:

  • 非常感谢,很有帮助。
  • 在同一个视图中,如果我有工具栏,那么我想在工具栏标题中显示点击的类别名称,如何做到这一点?
  • 这是同一个视图,但我想显示,如果我点击架构,我想在标题中显示该架构的另一个视图。
  • 你说“在同一个视图中”,这就是我这样发布的原因。
【解决方案2】:

我真的不知道你的代码有什么问题,因为我测试过它并且运行良好。但是,有些事情是错误的。

  • 您不需要在 itemTpl 中使用 for 循环,因为“itemTpl”已经存在 为您迭代您的数据数组。如果你是,你会需要它 仅使用“tpl”。
  • 避免让您的听众出现在您的视野中。反而, 在控制器中获取对列表的引用,并设置 那里的听众。 这是一种不好的做法,它破坏了 NVC 模式。

这是一个适用于我的 te4st 应用程序的小版本:

{
    xtype: 'list', 
    itemId: 'catList',
    scrollable: false,
    data: [
        { category_name: 'A', cat_id: 1},
        { category_name: 'B', cat_id: 2},
        { category_name: 'C', cat_id: 3},
        { category_name: 'D', cat_id: 4},
        { category_name: 'E', cat_id: 5},
    ],
    loadingText: "Loading Words...",
    emptyText: '<div>{message}</div>',
    autoLoad:true,
    itemTpl: '{category_name}',   
    listeners: {
        'itemtap': function(list, index, target, record, e, eOpts){
            //TODO: whatever..
        }
    }
}

【讨论】:

  • 感谢您的回复,但我知道这是可行的,但我的问题是,如何从商店中获取该值。参见 ->>store: 'CategoryStore', 。我想进那家店。请你能帮我解决这个问题。
  • 如果我从商店获得价值,这是有效的,我无法获得挖掘价值。如果我这样做,它就可以工作。
  • 我的数据显示这种类型,根据JSON: itemTpl: [ '
    ', '', '
      ', ' {category_name} ', '
    ' , '
    ', '
    '],看看我的问题,我在问题末尾添加了我的 JSON。
  • 我向您展示的示例是使用存储或内联数据。正如我所说,您的控制器中应该有监听器。在 itemtap 回调方法中,“记录”是来自商店的记录,因此您可以访问该记录的所有属性。如果这是您想要的商店,有两种方法 1. 在控制器中保留它的引用,2. 在回调方法中执行 list.getStore()
  • 我没有在控制器中使用监听器,它在视图中。但我没有得到 recode.get('cat_id') 值。我按照你之前说的那样使用了它,但确实得到了它。temTpl: [ '
    ', '', '
      ', '{category_name} ', '
    ' , '
    ', '
    '], 监听器: { 'itemtap': function(list, index, target, record, e, eOpts){控制台.log(索引); recode.get('cat_id'); }}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
相关资源
最近更新 更多