0

私はベースコントローラーを作成してそれに書き込もうとしました:

Ext.define('My.Users.controller.Role', {
    extend      : 'Ext.app.Controller',
    stores       : [
        'Modules', 'ModulesList'
    ],
    models       : [
        'Modules', 'ModulesList'
    ]
});

しかし、getModulesStore()やgetModulesListModel()のように(この基本クラス、またはMy.Users.controller.Groupのような子クラスで)ゲッターを使用しようとすると、関数ではないというエラーが発生します。 。そしてFirebugでは、子クラスとそのスーパークラスにこのメソッドがないことがわかります。どうすれば修正できますか?

このバグを再現する方法の完全な説明:1)SenchaからExtJS4.1GPLをダウンロードします

2)アーカイブを解凍し、ディレクトリextjs-4.1.0 / examples / app /feed-viewer/に移動します。

3)ファイルfeed-viewer.htmlコメント行<script type="text/javascript" src="all-classes.js"></script>で、jsファイルの動的ロードを強制します。これで、通常、プロジェクトファイルのコンテンツを編集できます。

4)フォルダーapp / controllerに、次のコードを使用してEntities.jsという名前のファイルを作成します。

Ext.define('FV.controller.Entities', {
    extend: 'Ext.app.Controller',
    models: ['Shared'],
    stores: ['Shared']
});

5)ファイル内のArticles.jsとFeeds.jsの変更は「FV.controller.Entities」に拡張されます

6)フォルダーapp/modelおよびapp/storeで、コンテンツを含むShared.jsファイルを作成します

Ext.define('FV.model.Shared', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
    {
        name: 'id',
        type: 'int'
    },
    {
        name: 'title',
        type: 'string'
    }
    ]
}); 

モデルと

Ext.define('FV.store.Shared', {
    extend: 'Ext.data.Store',
    model: 'FV.model.Shared',
    proxy: {
        type: 'ajax',
        url: 'test.json',
        reader: {
            type: 'json',
            root: 'item'
        }
    }
});

ストア用。

7)最後に、たとえば、Article.jsのinitメソッドでconsole.log(this);を試してください。Firebugでは、getSharedModel()メソッドとgetSharedStore()メソッドを取得できません。

サンプルをhttp://nekaka.com/d/W1_EOlnPSTにアップロードしました

4

2 に答える 2

2

プロパティを使用している場合、ビューに対してゲッターが生成されますrefs

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.app.Controller - 「参照の使用」セクションをチェックしてください。

ストアの場合は使用するだけですthis.getStore('Modules')

于 2012-06-16T12:28:05.257 に答える
1

modelsおよびstores構成プロパティです。のソースを見るとExt.app.Controller、コンストラクターで作成されたゲッターが表示されます。

FV.controller.Articlesコントローラー クラスに固有ですが、独自の基本クラスのものをオーバーライドする独自のプロパティmodelsとプロパティがあります。storesこれは、コンポーネントに構成がある場合とほぼ同じ方法heightで、すべての基本クラスの構成をオーバーライドします (基本クラスがコンストラクターまたは initComponent で構成をオーバーライドすることによってそのような構成を強制しない限り、これはcontroller単純な構成プロパティを使用する場合には当てはまりません) )。

これを機能させるには、コントローラーに固有のクラスで、基本クラスの構成を新しい構成と明示的にマージする必要があります。繰り返しますが、コンポーネントと同じです。

あるいは (そしておそらくより良い解決策)、共有モデルとストアを基本クラスの構成プロパティとして定義する代わりに、これらをコンストラクターが取得する構成にマージすることができます。ベースコントローラークラスのコンストラクターで次のようにします。

Ext.merge( config, {
    models: ['Shared'],
    stores: ['Shared']
});
于 2012-06-18T10:20:45.577 に答える