使用ExtJS v4.1 MVC,我有一个包含以下代码的应用程序类:
Ext.application({
name: 'SHOP',
appFolder: 'shop',
...
我的主视口有以下代码和项目:
requires: ['SHOP.view.CategoryKey'],
requires: ['SHOP.view.ProductLister'],
...
layout: {
type: 'border',
padding: 3
},
items: [{
region: 'west',
title: 'TEST1',
xtype: 'CategoryKey'
},{
region: 'center',
title: 'TEST2',
border: false
}]
请注意,我的视口使用ProductLister对象不(但请耐心等待。)
为了完整性,以下是ProductLister的代码。请注意,这只是一些用于将View放入我的应用程序的基本内容。
Ext.define('SHOP.view.ProductLister', {
extend: 'Ext.view.View',
alias: 'widget.productimages',
title: 'List Test'
});
我看到两件非常奇怪的事情。首先,当我按上面显示的顺序放置requires语句时,当我尝试显示页面时,我遇到以下故障(使用debug运行):
TypeError:名称未定义
但如果我更改了requires语句的 order ,那么它看起来如下所示:
requires: ['SHOP.view.ProductLister'],
requires: ['SHOP.view.CategoryKey'],
错误消失了!
我看到的第二个奇怪的事情是,当我实际更改项目列表以便中心拥有我的ProductLister时:
layout: {
type: 'border',
padding: 3
},
items: [{
region: 'west',
title: 'TEST1',
xtype: 'CategoryKey'
},{
region: 'center',
xtype: 'productimages'
}]
我也遭遇了同样的失败:
TypeError:名称未定义
我还监控了文件的加载,并注意到在所有情况下都不会加载ProductLister.js文件!
其他一些事实:
MVC应用程序具有标准的目录集,只有root是“shop”(因此Application中的appFolder属性)。 CategoryKey和ProductLister类都在视图子文件夹中。
我确实有一个列出两个视图类的控制器(我最终希望在控制器之间放置事件处理):
config: {
stores: ['Categories'],
views: ['CategoryKey','ProductLister']
},
理论上,在requires语句和控制器中的配置之间,我的两个视图都应加载。但由于某种原因,ExtJS加载器似乎正在加载CategoryKey.js文件而不是ProductLister.js文件。
此外,我认为require语句的顺序无关紧要,但是当我不使用ProductLister对象时,它显然是这样。
我在MVC机制中发现了一个奇怪的错误,或者我错过了一些东西。我希望我错过了一些东西。
有谁知道这里发生了什么?更重要的是,我该怎么做才能使这段代码工作?我在某个地方错过了一个声明吗?如果是这样,在哪里?
有人请指教......
答案 0 :(得分:2)
最奇怪的是你宣告requires
属性两次,覆盖第一个:
var o = { a:[1], a:[2] };
o.a.join(' ') === '1 2' // false
o.a.join(' ') === '2' // true
请改为尝试:
requires: ['SHOP.view.ProductLister', 'SHOP.view.CategoryKey']