下面,您将看到我在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配置中肯定缺少某些东西。
[Ext.Loader] Synchronously loading 'MyApp.store.TreeStructures'; consider adding Ext.require('MyApp.store.TreeStructures') above Ext.onReady
注意:在浏览器崩溃之前,TreeStructures.js(存储)JavaScript文件一直被请求无限次:
Uncaught RangeError: Maximum call stack size exceeded
[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
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'
}
});
}
});
答案 0 :(得分:5)
更改Ext.create('MyApp.store.TreeStructures'...
到Ext.define('MyApp.store.TreeStructures'......