问题的标题可能不是很好。无论如何;
假设我将模型定义为:
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
,因为此模型用于填充TreePanel
,root
作为默认行为,/someurl/root
附加从服务器(GET
)加载资源时,/someurl
到URL,这不符合REST。在REST中加载所有资源时,它应该向/someurl/307
发出App.model.MyModel.load(307, { success: function(){ // some callback }}
请求,这就是全部,而当它应该加载特定资源时,将其id附加到URL的末尾,如{{ 1}}。
当我需要使用此模型定义从服务器获取特定资源时,情节变浓,如appendId
中所示,因为false
为GET /someurl?node=307
,ExtJs将GET /someurl/307
而不是TreeStore
!
最后,问题是:如何克服这个问题?如何仅将args = parser.parse_args()
配置为不将ID附加到URL?换句话说,如何让商店的代理继承自模型的代理,但是有自己的定义,而不会弄乱模型?
答案 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,
}
});