如何为模型和商店设置不同的代理配置

时间:2015-06-05 11:26:06

标签: javascript extjs extjs5

问题的标题可能不是很好。无论如何;

假设我将模型定义为:

Ext.define('App.store.MyModelTreeStore', {
    extend : 'Ext.data.TreeStore',
    requires : [ 'App.model.MyModel' ],
    alias : 'store.mymodeltreestore',
    model : 'App.model.MyModel',
    storeId : 'mymodeltreestore',

    root : {
        expanded : true
    },

});

使用此模型定义的TreeStore:

appendId

在此模型中,代理的属性false设置为TreePanel,因为此模型用于填充TreePanelroot作为默认行为,/someurl/root附加从服务器(GET)加载资源时,/someurl到URL,这不符合REST。在REST中加载所有资源时,它应该向/someurl/307发出App.model.MyModel.load(307, { success: function(){ // some callback }}请求,这就是全部,而当它应该加载特定资源时,将其id附加到URL的末尾,如{{ 1}}。

当我需要使用此模型定义从服务器获取特定资源时,情节变浓,如appendId中所示,因为falseGET /someurl?node=307,ExtJs将GET /someurl/307而不是TreeStore

最后,问题是:如何克服这个问题?如何仅将args = parser.parse_args()配置为不将ID附加到URL?换句话说,如何让商店的代理继承自模型的代理,但是有自己的定义,而不会弄乱模型?

2 个答案:

答案 0 :(得分:0)

我的(非最佳)解决方案是创建扩展App.model.MyModelTree的{​​{1}},区别在于将App.model.MyModel添加到其代理设置,并使appendId: false使用这个模型而不是原始模型。

TreeStore

这是一个肮脏的解决方案,我不同意指定一个特殊用途的新模型。我认为Sencha应该紧急审查Ext.define('App.model.MyModel', { extend: 'Ext.data.Model', // etc proxy: { type: 'rest', url: '/someurl', } } Ext.define('App.model.MyModelTree', { extend : 'App.model.MyModel', proxy : { type : 'rest', url :'/someurl', appendId : false, } }); 因为我记得自ExtJS 4以来遇到这个问题。

答案 1 :(得分:0)

您可以在商店配置中指定新代理。它将覆盖模型的代理属性。

Ext.define('App.store.MyModelTreeStore', {
    extend : 'Ext.data.TreeStore',
    requires : [ 'App.model.MyModel' ],
    alias : 'store.mymodeltreestore',
    model : 'App.model.MyModel',
    storeId : 'mymodeltreestore',

    root : {
        expanded : true
    },
    proxy: {
        type : 'rest',
        url :'/someurl',
        appendId : false,
    }
});