0

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

});

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

4

2 回答 2

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: {}

});
于 2014-07-19T11:20:45.570 回答
1

这是一个错误。如果你调用load一个空的 TreeStore,它会正常加载,它不会关注你传入的任何选项,例如参数。

首先设置根节点允许负载工作 - 但是,正如您所见,您不能在 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-根节点

至于解决方法:

  • 您可以使用params代理上的配置来提供参数。烦人,但它确实有效。(实际上,extraParams可能是更好的选择,因为它允许您保留身份验证令牌并在使用时更改主要参数reload)。
  • 您可以使用事件处理来获取回调。

顺便说一句,因为您正在使用autoLoad: false,所以您需要在某个时候加载商店。在将其添加到 TreePanel之前执行此操作 - 获得与 TreePanel 一起使用的根节点的唯一方法似乎是让 TreePanel 为您制作它。

于 2014-07-21T10:56:07.880 回答