特定listitem的ComponentQuery

时间:2013-06-24 16:37:20

标签: sencha-touch sencha-touch-2

我想创建一个带有引用列表中特定项的引用的控制器,这可能吗?

所以我真的需要ComponentQuery引用一个listitem。我在列表中设置内联数据:

Ext.define('MyApp.view.MyView', {
    extend : 'Ext.List',
    alias : 'widget.mylist',

    config : {
        title : 'Title',

        itemTpl : ['{displayName}'].join(''),

        data : [{
            displayName : 'One',
            id : 1
        }, {
            displayName : 'Two',
            id : 2
        }, {
            displayName : 'Three',
            id : 3
        }, {
            displayName : 'Four',
            id : 4
        }]
    }
});

然后在我的控制器中(这显然不起作用):

refs : {
    oneListItem: 'mylist.list[id=1]',
    twoListItem: 'mylist.list[id=2]',
    threeListItem: 'mylist.list[id=3]',
    fourListItem: 'mylist.list[id=4]'
}

希望这是可能的。如果不是,我可以在列表上听一个'itemtap'并从那里调用一个方法,但是,我宁愿不必为了清洁而这样做。

提前致谢。

布拉德

2 个答案:

答案 0 :(得分:1)

首先:将id添加到数据部分中的对象不会产生任何影响,这只是在您之前指定的itemTpl中取代和替换的数据。

关于你的问题:Sencha Touch 2文档没有提到让Ext.ComponentQuery选择Component的第n个孩子的方法,因此,假设您想要使用内联创建列表对象数据,我看到的唯一方法是使用Sencha在创建时自动应用于每个listItem的id

这些ID属于#ext-listitem-1类,请参阅此Sencha Fiddle demo中如何使用它们的示例。

这是一种不好的做法,因为你不能依赖那些id,例如,如果你向你的应用程序添加另一个列表,他们就可以改变你的代码。

我没有看到为什么你不应该使用itemtap来对列表进行操作的任何正当理由,因为在事件中你获得了操作正确列表项所需的所有数据:

itemtap( this, index, target, record, e, eOpts )

为了完整起见,我必须提到您还可以使用Ext.dataview.List.add()动态添加项目,这样您就可以使用自定义{{1}创建dataitems }。

答案 1 :(得分:0)

如果您想要处理第一个或最后一个项目,可以尝试Ext.select('.x-list-item-first');Ext.select('.x-list-item-last');。我建议您将xtype设置为“mylist”而不是使用别名。