ExtJS MVC中的奇怪故障

时间:2013-02-05 14:14:21

标签: extjs extjs4 extjs4.1

使用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文件!

其他一些事实:

  1. MVC应用程序具有标准的目录集,只有root是“shop”(因此Application中的appFolder属性)。 CategoryKey和ProductLister类都在视图子文件夹中。

  2. 我确实有一个列出两个视图类的控制器(我最终希望在控制器之间放置事件处理):

    config: {
    stores: ['Categories'],
    views: ['CategoryKey','ProductLister']
    },
    
  3. 理论上,在requires语句和控制器中的配置之间,我的两个视图都应加载。但由于某种原因,ExtJS加载器似乎正在加载CategoryKey.js文件而不是ProductLister.js文件。

    此外,我认为require语句的顺序无关紧要,但是当我不使用ProductLister对象时,它显然是这样。

    我在MVC机制中发现了一个奇怪的错误,或者我错过了一些东西。我希望我错过了一些东西。

    有谁知道这里发生了什么?更重要的是,我该怎么做才能使这段代码工作?我在某个地方错过了一个声明吗?如果是这样,在哪里?

    有人请指教......

1 个答案:

答案 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']