同步加载“MyApp.store.TreeStructures”; 考虑添加Ext.requir

2019-09-28 00:06发布

下面,你会看到,我得到一个JavaScript异常与我在煎茶ExtJS的MVC应用程序创建一个MVC视图。 我有一个“延伸Ext.tree.Panel”读取的,而不是通过一个Ext.Direct代理和.NET服务器一侧堆拉数据的简单JSON对象另一个MVC观点,但是这是唯一不同的是代理执行和当然,我们的MVC控制器逻辑。 在静态(JSON)的实施,我们的代理模型中定义。 在动态(Ext.Direct)的实施,我们的代理在存储中定义。 JavaScript文件不断被请求的次数无限量,直至浏览器崩溃的TreeStructures.js(存储)。 请参看以下例外。

我很怀疑这是一个Ext.Direct问题,因为我有其他商店这种架构伟大的工作。 我看到[Ext.Loader]例外,但我不知道为什么一个人守,每一个新TreeStructures.js请求重复。 或在哪里实现需要。 我的理解是,app.js定义控制器。 然后,控制器定义了一个模型存储。 和视口定义和实例等MVC的意见。 我的“其他意见”作为树视图。 和View实现了商店。

此外,煎茶CMD“煎茶应用程序构建”命令不能正常工作。 通常情况下我的应用程序编译没有任何问题,所以东西在商店或MVC配置是必要为这个动态树肯定是错过。

异常在JavaScript控制台:

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

浏览器崩溃这个JavaScript异常:

注:JavaScript文件不断被请求的次数无限量,直至浏览器TreeStructures.js(店)与此崩溃了:

Uncaught RangeError: Maximum call stack size exceeded

煎茶Cmd的错误(调用“煎茶应用程序构建”命令后):

[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'
            }
        });
    }
});

Answer 1:

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

为了Ext.define( 'MyApp.store.TreeStructures' ...



文章来源: Synchronously loading 'MyApp.store.TreeStructures'; consider adding Ext.require('MyApp.store.TreeStructures') above Ext.onReady