具有代理类型的rest的extjs treestore将-1附加到模型名称

时间:2014-07-28 20:33:20

标签: extjs

TreeStore存在一个特殊问题,其余类型树存储将-1添加到打破后端路由的模型名称。 TreeStore定义为

   Ext.define('Gateway.store.Company', {
    extend: 'Ext.data.TreeStore',
    model: 'Gateway.model.Company',


    proxy: {
        type: 'rest',
        url:  'http://gateway-email-mock/',
        reader: {
            type: 'json'
        }
       }
});

公司模型定义为

Ext.define('Gateway.model.Company', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',   type: 'int'    },
        {name: 'name', type: 'string' }
    ]
});

对商店感兴趣的观点是

Ext.define('Gateway.view.company.Company', {
    extend: 'Ext.tree.Panel',
    alias:  'widget.company-list',
    store: 'Gateway.store.Company',
    rootVisible: false
});

加载小部件时,商店会创建URL

http://gateway-email-mock/Gateway.model.Company-1

-1如何在模型名称后到达那里?我不认为这是故意的?

感谢您的任何提示。

1 个答案:

答案 0 :(得分:1)

Rixo是正确的,即尝试加载其根节点的树存储。默认的id生成器以下列方式生成其ID

idgen: {
    isGenerator: true,
    type: 'default',

    generate: function () {
        return null;
    },
    getRecId: function (rec) {
        return rec.modelName + '-' + rec.internalId;
    }
}

这意味着您的根记录为rec.modelName + '-' + rec.internalId,这正是正在发出的请求:http://gateway-email-mock/Gateway.model.Company-1

解决方案是确保您创建一个带有ID的根节点,以便树的存储将请求正确的ID,正确的是为您生成根节点并为其提供自动ID。请参阅http://docs-origin.sencha.com/extjs/4.2.2/source/TreeStore.html#Ext-data-TreeStore-method-loadhttp://docs-origin.sencha.com/extjs/4.2.2/#!/api/Ext.data.TreeStore-cfg-root