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 のコードを示します。これは、ビューをアプリケーションに配置することを目的とした基本的なものにすぎないことに注意してください。

Ext.define('SHOP.view.ProductLister', {
extend: 'Ext.view.View',
alias: 'widget.productimages',
title: 'List Test'
});

私は2つの本当に奇妙なものを見ています。まず、require ステートメントを上記の順序で配置すると、ページを表示しようとすると、次のエラーが発生します (デバッグを使用して実行)。

TypeError: 名前が定義されていません

しかし、require ステートメントの順序を変更すると、次のようになります。

    requires: ['SHOP.view.ProductLister'],
requires: ['SHOP.view.CategoryKey'],

エラーが消えます!

私が見ている2番目の奇妙なことは、アイテムリストを実際に変更して、センターにProductListerがあるようにすることです:

            layout: {
            type: 'border',
            padding: 3
        },
        items: [{
            region: 'west',
            title: 'TEST1',
            xtype: 'CategoryKey'
        },{
            region: 'center',
            xtype: 'productimages'
        }]

私は同じ失敗をします:

TypeError: 名前が定義されていません

また、ファイルのロードを監視したところ、常に ProductLister.js ファイルがロードされていないことがわかりました。

その他のいくつかの事実:

  1. MVC アプリケーションにはディレクトリの標準セットがあり、ルートのみが「shop」です (したがって、アプリケーションの appFolder プロパティ)。CategoryKey と ProductLister クラスの両方がビュー サブフォルダーにあります。

  2. 私は両方のビュー クラスをリストするコントローラーを持っています (最終的には、それらの間にイベント処理をコントローラーに配置したいと考えています)。

    config: {
    stores: ['Categories'],
    views: ['CategoryKey','ProductLister']
    },
    

理論的には、require ステートメントとコントローラーの構成の間に、両方のビューを読み込む必要があります。しかし、何らかの理由で、ExtJS ローダーは CategoryKey.js ファイルをロードしているように見えますが、ProductLister.js ファイルはロードしていないようです。

さらに、require ステートメントの順序は重要ではないと思いますが、ProductLister オブジェクトを使用していないときは、どうやら重要です。

MVC メカニズムに奇妙なバグを発見したか、何かを見逃しました。私は何かを逃したことを願っています。

ここで何が起こっているのか誰にも分かりませんか?さらに重要なことは、このコードを機能させるにはどうすればよいでしょうか??? どこかに宣言がありませんか?もしそうなら、どこですか?

誰かアドバイスください...

4

1 に答える 1

2

最も奇妙なことはrequires、最初のプロパティをオーバーライドして、プロパティを 2 回宣言することです。

var o = { a:[1], a:[2] };
o.a.join(' ') === '1 2' // false
o.a.join(' ') === '2' // true

代わりにこれを試してください:

requires: ['SHOP.view.ProductLister', 'SHOP.view.CategoryKey']
于 2013-02-05T15:01:56.430 に答える