Sencha touch 2 - 在DataView中显示嵌套模型

时间:2012-05-04 13:48:17

标签: sencha-touch sencha-touch-2

我有一个代表用户的模型。用户有一些个人字段(姓名,家庭)和另一个模型,如hasMany(例如他的手机)。

类似的东西:

Ext.define('MyApp.model.User', {
    extend: 'Ext.data.Model',
    config: {
        fields: ['ID', 'Name', 'Family'],
        hasMany: { model: 'MyApp.model.Phone', name: 'Phones', associationKey: 'phones' }
   }
});

Ext.define('MyApp.model.Phone', {
    extend: 'Ext.data.Model',
    config: {
        fields: ['ID', 'Phone', 'Type']
   }
});

现在,我想将它加载到数据视图(我成功完成),并希望显示用户信息,然后显示属于他的电话列表以及用户点击手机时 - 显示它使用布局(或消息,或任何东西 - 重点是得到它的ID)

问题在于,当我使用itemtap时,它会获得整个记录,包括用户信息和所有手机 - 所以我真的不知道手机是什么用的。

要显示用户信息,我只需使用显示信息的itemTpl,然后列出所有手机。

那么 - 我怎么知道手机被点击了什么?

谢谢! 罗马

1 个答案:

答案 0 :(得分:0)

除非您将phonesuserRecord.phones())商店直接绑定到数据视图,否则没有干净的方法可以执行此操作。相反,您需要获得itemtap事件的目标并检查它是什么元素。

itemtap: function(me, index, target, record, e) {
    var el = Ext.get(e.target);
    alert(el.dom.innerHTML);
}

完整示例:

Ext.application({
    name: 'Sencha',

    launch: function() {
        Ext.create('Ext.DataView', {
            fullscreen: true,
            store: {
                fields: ['name'],
                data: [
                    { name: 'one' },
                    { name: 'two' }
                ]
            },
            itemTpl: '{name} <span>tap me</span>',
            listeners: {
                itemtap: function(me, index, target, record, e) {
                    var el = Ext.get(e.target);
                    alert(el.dom.innerHTML);
                }
            }
        });
    }
});