Extjs将idproperty添加到商店中定义的字段

时间:2013-02-19 09:35:56

标签: extjs

我正在商店配置中直接设置我的字段。

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

    autoLoad: false,

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

是否可以在商店中直接为这些字段设置idProperty?我看到的唯一选择是创建一个包含idProperty的单独模型类。但我想避免这种情况。

3 个答案:

答案 0 :(得分: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
 });

答案 1 :(得分:5)

理论上,您可以通过这种方式在构造函数中更改idProperty

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' }
    ]
});

答案 2 :(得分:1)

对于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'})