5

ストア構成でフィールドを直接設定しています。

Ext.define('T.store.Users', {
    extend: 'Ext.data.Store',

    autoLoad: false,

    fields: [
        { name: 'Id', type: 'int' },
        { name: 'Name', type: 'string' }
    ]
});

これらのフィールドの idProperty をストアで直接設定することは可能ですか? 私が見る唯一のオプションは、idProperty を含む別のモデル クラスを作成することです。しかし、これは避けたいと思います。

4

3 に答える 3

14

デフォルトの id プロパティはidです。モデルまたはプロキシのリーダーで変更できます。

注:ストアはモデルのプロキシを使用できます (この例では使用されていません)。

例(両方あり)

// Set up a model to use in our Store
 Ext.define('User', {
     extend: 'Ext.data.Model',
     idProperty: 'Id',
     fields: [
         {name: 'firstName', type: 'string'},
         {name: 'lastName',  type: 'string'},
         {name: 'age',       type: 'int'},
         {name: 'eyeColor',  type: 'string'}
     ]
 });

 var myStore = Ext.create('Ext.data.Store', {
     model: 'User',
     proxy: {
         type: 'ajax',
         url: '/users.json',
         reader: {
             type: 'json',
             root: 'users',
             idProperty: 'Id'
         }
     },
     autoLoad: true
 });
于 2013-02-19T09:56:16.827 に答える
5

理論的idPropertyには、コンストラクター内で from を次のように変更できます。

Ext.define('T.store.Users', {
    extend: 'Ext.data.Store',

    autoLoad: false,

    constructor: function(){
        this.callParent(arguments);
        this.model.prototype.idProperty = 'Id';
    },

    fields: [
        { name: 'Id', type: 'int' },
        { name: 'Name', type: 'string' }
    ]
});
于 2013-02-19T10:03:46.593 に答える
3

ExtJS 6 の場合

Ext.define(null, {
    override: 'Ext.data.ProxyStore',

    /**
     * @cfg {String} idProperty
     */
    // idProperty: null,

    privates: {
        createImplicitModel: function(fields) {
            var me = this,
                modelCfg = {
                    extend: me.implicitModel,
                    statics: {
                        defaultProxy: 'memory'
                    }
                },
                proxy, model;
            if (fields) {
                modelCfg.fields = fields;
            }
            // add
            if(me.idProperty) {
                modelCfg.idProperty = me.idProperty;
            }

            model = Ext.define(null, modelCfg);
            me.setModel(model);
            proxy = me.getProxy();
            if (proxy) {
                model.setProxy(proxy);
            } else {
                me.setProxy(model.getProxy());
            }
        }
    }
});

Ext.define('T.store.Users', {
    extend: 'Ext.data.Store',

    autoLoad: false,
    idProperty: 'Id',

    fields: [
        { name: 'Id', type: 'int' },
        { name: 'Name', type: 'string' }
    ]
});

テスト

var store = Ext.create('T.store.Users');
console.log(store.model.idProperty); // "Id"
console.log(store.model.idField); // constructor {name: "Id", type: "int"..}
store.add({Id: '11', Name: 'XXX'})
于 2018-09-14T00:38:52.393 に答える