ExtJS 4 TreeStore静态JSON - 不会加载

时间:2013-03-29 19:56:54

标签: javascript extjs sencha-architect

我只是想把一个静态的JSON文件加载到TreeStore中,而且我正在撕掉我的头发。

我有一个模特:

Ext.define('pronghorn_ui_keyboard.model.CommandKey', {
    extend: 'Ext.data.Model',
    fields: [
        {
            name: 'id'
        },
        {
            name: 'key'
        },
        {
            name: 'command'
        }
    ]
});

我有一个TreeStore:

Ext.define('pronghorn_ui_keyboard.store.Commands', {
    extend: 'Ext.data.TreeStore',

    requires: [
        'pronghorn_ui_keyboard.model.CommandKey'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            storeId: 'commands',
            model: 'pronghorn_ui_keyboard.model.CommandKey',
            proxy: {
                type: 'ajax',
                url: 'commands.json',
                reader: {
                    type: 'json'
                }
            }
        }, cfg)]);
    }
});

我在commands.json上有以下JSON:

{
    id: 'root',
    key: null,
    command: null,
    children: [
        {
            id: 't'
            key: 't'
            command: null,
            children: [
                {
                    id: 'te'
                    key: 'e'
                    command: 'Trade Equity'
                    leaf: true
                }
            ]
        }
    ]
}

我正在尝试以编程方式加载此树并在控制台中检查它。在Controller init函数中:

var me = this;

me.getCommandsStore().load({
    callback: function() {
        me.rootCommandKey = me.getCommandsStore().getRootNode();
        me.currentCommandKey = me.rootCommandKey;
        console.log(me.currentCommandKey);
        console.log(me.currentCommandKey.id);
        console.log(me.currentCommandKey.hasChildNodes());
        me.initMainCommands();
    },
    scope: me
});

控制台为currentCommandKey提供了某些,但ID不是我的根ID,而hasChildNodes()是false。显然文件没有被加载。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我的JSON无效;基本上没有逗号。

这是正确的JSON:

{
    success: true,
    children: [
        {
            string: 't',
            key: 't',
            command: null,
            children: [
                {
                    string: 'te',
                    key: 'e',
                    command: 'Trade Equity',
                    leaf: true
                }
            ],
            leaf: false
        }
    ]
}

我还需要使用异步调用更好地处理错误。我将一堆东西移动到Store本身的方法中,并使用本地绑定将该init状态绑定到load事件,这暴露了一堆load-terminated-condition标志。