0

ユーザーを表すモデルがあります。ユーザーにはいくつかの個人的なフィールド (名前、家族) と 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 を使用します。

では、盗聴された電話をどのように知ることができますか?

ありがとう!ローマン

4

1 に答える 1

0

phones( userRecord.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);
                }
            }
        });
    }
});
于 2012-05-04T22:58:10.170 に答える