同步加载'MyApp.store.TreeStructures';考虑在Ext.onReady上面添加Ext.require('MyApp.store.TreeStructures')

时间:2013-08-05 19:02:06

标签: extjs extjs-mvc sencha-cmd ext-direct

下面,您将看到我在Sencha ExtJS MVC应用程序中创建的MVC视图的JavaScript异常。我有另一个MVC视图扩展'Ext.tree.Panel',它读​​取一个简单的JSON对象而不是通过Ext.Direct代理和.NET服务器端堆栈提取数据,但唯一不同的是代理实现和当然我们的MVC控制器逻辑。在静态(JSON)实现中,我们的代理在模型中定义。在动态(Ext.Direct)实现中,我们的代理在商店中定义。在浏览器崩溃之前,TreeStructures.js(存储)JavaScript文件一直被请求无限次。请参阅下面的例外情况。

我非常怀疑这是一个Ext.Direct问题,因为我有其他商店在这个架构上工作得很好。我看到了[Ext.Loader]异常,但我不确定为什么会不断重复每个新的TreeStructures.js请求。或者在哪里实现这一要求。我的理解是app.js定义了控制器。然后控制器将模型定义为商店。 Viewport定义并实例化其他MVC视图。我的“其他观点”是树视图。视图实现了商店。

此外,Sencha Cmd“sencha app build”命令无效。通常我的应用程序编译没有任何问题,因此在这个动态树所需的商店或MVC配置中肯定缺少某些东西。

JavaScript控制台中的异常:

[Ext.Loader] Synchronously loading 'MyApp.store.TreeStructures'; consider adding Ext.require('MyApp.store.TreeStructures') above Ext.onReady

浏览器因此JavaScript异常而崩溃:

注意:在浏览器崩溃之前,TreeStructures.js(存储)JavaScript文件一直被请求无限次:

Uncaught RangeError: Maximum call stack size exceeded

Sencha Cmd错误(在调用“sencha app build”命令后):

[ERR] failed to find meta class definition for name MyApp.store.TreeStructures
[ERR] def was null
[ERR] C2008: Requirement had no matching files <MyApp.store.TreeStructures> -- unknown-file:-1

静态树实现(读取JSON对象以获取数据):

Ext.define('MyApp.store.Categories', {
    extend : 'Ext.data.TreeStore',
    model : 'MyApp.model.Category',
    autoLoad : true,
    root : {
        text : 'All',
        alias : '',
        expanded : true
    }
});

Ext.define('MyApp.model.Category', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'alias', type: 'auto' },
        { name: 'text', type: 'auto' }
    ],

    proxy: {
        type: 'ajax',
        url: 'data/categories.json'
    }
});

Ext.define('MyApp.controller.ConceptTreeReadonly', {
    extend : 'Ext.app.Controller',
    stores: ['Categories'],
    models: ['Category'],
    refs : [{
        ref: 'categories',
        selector: 'view-west'
    }],
});

动态树实现(使用服务器端堆栈获取数据):

Ext.create('MyApp.store.TreeStructures', {
    extend: 'Ext.data.TreeStore',
    model : 'MyApp.model.TreeStructure',
    proxy: {
        type: 'direct',
        directFn: Concept_Tree_Structure.read,
        reader: {
            root: 'data'
        }
    },
    root: {
        text: 'Concept Tree',
        id: 'root',
        expanded: false
        //children: []
    },
    autoLoad: false
});

Ext.define('MyApp.model.TreeStructure', {
    extend: 'Ext.data.Model',
    xtype: 'model-tree-structure',

    fields: [
        { name: 'text' }, //  string                    
        { name: 'id' }, // Int32    type: 'int'
        { name: 'expanded' }, // boolean                   
        { name: 'leaf' }, // boolean       
        { name: 'children' } // List<TreeStructure>            
    ]
});

Ext.define('MyApp.controller.ConceptTreeController', {
    extend : 'Ext.app.Controller',

    stores: ['TreeStructures', 'Concepts'],
    models: ['TreeStructure', 'Concept'],

    refs : [{
        ref: 'concept-tree',
        selector: 'view-concept-tree'
    }],
    init : function() {

        this.getConceptsStore().load({
            params: {
                start: 0, 
                limit: 10,
                foo: 'bar'
            }
        });

        this.getTreeStructuresStore().load({
            params: {
                start: 0,
                limit: 10,
                foo: 'bar'
            }
        });
    }
});

1 个答案:

答案 0 :(得分:5)

更改Ext.create('MyApp.store.TreeStructures'...

到Ext.define('MyApp.store.TreeStructures'......