0

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

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

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”并从那里调用一个方法,但是,为了清洁,我宁愿不必这样做。

提前致谢。

布拉德

4

2 回答 2

1

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

至于您的问题:Sencha Touch 2 Documentation 没有提到Ext.ComponentQuery选择 a 的第 n 个子项的方法Component,因此,假设您想使用内联数据创建列表对象,我看到的唯一方法是使用idSencha在创建时自动应用于每个 listItem。

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

然而,这是不好的做法,因为您不能依赖这些 id,例如,如果您将另一个列表添加到您的应用程序,他们可能会更改破坏您的代码。

我看不出您不应该使用 itemtap 对列表进行操作的任何正当理由,因为通过事件您可以获得操作正确列表项所需的所有数据:

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

为了完整起见,我必须提到您还可以使用 Ext.dataview.List.add() 动态添加您的项目,这样您应该能够dataitems使用自定义创建您的项目id

于 2013-06-25T21:04:09.107 回答
0

您可以尝试Ext.select('.x-list-item-first');,或者Ext.select('.x-list-item-last');如果您想要处理第一个或最后一个项目。我鼓励您将 xtype 集添加到“mylist”而不是使用别名。

于 2013-06-25T20:06:16.177 回答