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 回答