我升级到ExtJS 5并且无法解决此问题。我有一个管理登录后所有内容的功能,并在登录后使用登录的新参数加载存储。
...
Ext.create('MyApp.store.MainStore').load({
params: {
auth: sessionStorage.authSessionId,
hostname: sessionStorage.hostname
},
callback: function(records, operation, success) {
//some callback
}
})
...
然而,这会加载商店,但没有参数,这会导致服务器端出错。 我的商店定义:
Ext.define('MyApp.store.MainStore', {
extend: 'Ext.data.TreeStore',
storeId: 'MainStore',
autoSync: false,
autoLoad: false,
proxy : {
type : 'ajax',
url : '/menu',
reader: {
type: 'json',
rootProperty: 'children',
},
listeners : {
exception : function(proxy, response, operation) {
//exception handling
}
}
},
fields: ['labelText','dbName','corpName','isLeaf', 'page']
});
有什么建议吗? 谢谢你的帮助。
答案 0 :(得分:1)
尝试在商店定义中声明根节点。
Ext.define('MyApp.store.MainStore', {
extend: 'Ext.data.TreeStore',
storeId: 'MainStore',
autoSync: false,
autoLoad: false,
proxy : {
type : 'ajax',
url : '/menu',
reader: {
type: 'json',
rootProperty: 'children',
},
listeners : {
exception : function(proxy, response, operation) {
//exception handling
}
}
},
fields: ['labelText','dbName','corpName','isLeaf', 'page'],
root: {}
});
答案 1 :(得分:0)
这是一个错误。如果你在一个空的TreeStore上调用load
,它会加载很好,但是它不会注意你传入的任何选项,比如参数。
首先设置根节点允许加载工作 - 但是,正如您所见,您无法在TreePanel中使用它(以及为什么还有TreeStore)。有点傻,呵呵?
我向Sencha报告了这个问题 - http://www.sencha.com/forum/showthread.php?288818-5.0.0.970-TreeStore.load()-doesn-t-call-callback-if-there-is-no-root-node。
至于解决方法:
params
配置提供参数。很烦人,但确实有效。 (实际上,extraParams
可能是更好的选择,因为它允许您在使用reload
时保留身份验证令牌并更改主要参数。autoLoad: false
,所以您需要在某个时刻加载商店。在之前将添加到TreePanel中 - 获取与TreePanel一起使用的根节点的唯一方法似乎是让TreePanel为您制作它。