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

use*_*126 5 extjs

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

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

    autoLoad: false,

    fields: [
        { name: 'Id', type: 'int' },
        { name: 'Name', type: 'string' }
    ]
});
Run Code Online (Sandbox Code Playgroud)

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

sra*_*sra 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
 });
Run Code Online (Sandbox Code Playgroud)


CD.*_*D.. 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' }
    ]
});
Run Code Online (Sandbox Code Playgroud)

  • 你的解决方案间接地解决了我面临的另一个问题:我在读者配置中定义的`idProperty`被忽略了(ExtJS 4.1.3).我的商店离Sra描述的商店不远,除了我没有自己定义模型而我的`idProperty`设置为``value"`. (2认同)