ExtJS:存储没有参数的负载

时间:2014-07-19 10:04:32

标签: javascript extjs extjs5

我升级到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']

});

有什么建议吗? 谢谢你的帮助。

2 个答案:

答案 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为您制作它。