5

私はextjs 4 MVCアプリケーションに取り組んでいます。

アプリケーションは、タブパネルを含むビューポートを実行します。各タブには、独自のコントローラーと複数のビューがあります。

http://wap7.ru/folio/ext-reuseable-store/TE.htmlで私のサンドボックスを参照してください。

私は 1 つの Store を数回使用しています (例: topmenu コンボボックスの 1 つのタブ、clietns グリッドの別のタブ)。 autoload: true で構成された Store。プロキシはモデルで構成されます。

私の問題: Store が複数回読み込まれます - コントローラ [store] 配列に言及するたびに。

配列 [stores] コントローラーから 1 つ削除すると、store: Ext.getStore ('STORE-ID') と表示されますが、コンボボックスは空になります。

ヒント、またはストア (モデルではない) を再利用する例を教えてくださいhttp://docs.sencha.com/ext-js/4-0/#!/guide/mvc_pt2

4

3 に答える 3

1

ストアをインスタンス化してロードし、オートロードを削除するだけです。

var store = Ext.create('App.store.YourStore').load();

次に、ページング バーをグリッドに接続する場合と同様に、そのストアをすべてのコンポーネントに渡します。

于 2012-08-23T13:32:59.990 に答える
0

以前は、読み込みに関して同様の問題がありました。また、同じストアを複数回使用する場合のフィルタリングで問題が発生しました (一方にはフィルターを設定し、もう一方にはフィルターを設定したくない場合があります)。したがって、アプリケーションの起動時にすべてのストアをロードします。次に、表示目的でそのストアが必要なときはいつでも、オリジナルを使用する代わりに、以下のように ha ユーティリティ関数を使用してメモリにクローンします。

/**
* Use this for example if you want to apply a filter on a store
* but you dont want the original store to change, so:
* singleton store has no filter
* you clone it to be used with filters in some places.
*
* Note: this will have memory proxy, so no changes to the stores are persistent,
* changes will have no effect on the local/remote db.
*
*/
createStore: function(storeId, data) {

    //
    // Creates a new store from the given array of records without
    // registering the new store.
    // See cloneStore for more info
    //
    var modelName = storeId;
    var prevStore = Ext.getStore(storeId);
    data = data || prevStore.data.all;

    var clonedStore = Ext.create('App.store.' + storeId, {
        data: data,
        model: 'App.model.' + modelName,
        proxy: 'memory'
    });

    Ext.data.StoreManager.register( prevStore );

    return clonedStore;

}

複製されたコピーはメモリ プロキシを使用していることに注意してください。したがって、書き込み操作は行わないでください。ストアを更新する必要がある場合は、常にオリジナルを使用してください。

これが何らかの形で役立つことを願っています。

于 2014-07-03T13:11:42.540 に答える
0

これは通常、他のコントローラーからストアを呼び出すために正常に機能します。

Ext.getStore('PlatformClient');

同じストアを複数のコントローラーstores配列に配置しようとしたことはありません。それは私には奇妙に思えます。

ただし、投稿したコードには他にもいくつかの奇妙な点があります。おそらくそれらは単なるタイプミスであり、フレームワークには何の違いもありませんが、私が通常行っていることとは異なるため、指摘します:

まず、「典型的なコントローラー」のモデル配列にはストアが含まれています。

models:[
'te.store.PlatformClient'

],

それはおそらく単なるタイプミスです。

第二に、ストア配列に完全な名前空間を入れていません。これは違いを生まないかもしれませんが、わかりません。ExtJS は、書き出された名前空間の上に名前空間を追加しているため、新しいコントローラーを初期化するたびに別のストアをインスタンス化していると見なされ、それによってリロードが発生します。たとえば、これは価値が何であれ、より「正常」です。

stores:[
    'Taxonomy',
    'PlatformClient',
    'DataType'
],
controllers:[
    'Taxonomies' ,
    'DataType' ,
    'DataSale' ,
    'Clients' 
],

そのように設定して、他のコントローラ ストア アレイ内の重複するストアを取り除きます。

storeIdまた、 MVC ストアの構成を定義する必要がないことについて、ドキュメントに記載されていることを確認してください。フレームワークは自動的にストアにこれを与えます:

storeId: [StoreClassName] 

したがって、あなたの例では、これを自動的に取得します。

storeId: 'PlatformClient'

他の誰かが最近 MVC ストアに問題を抱えstoreIdていましたが、MVC パターンを使用して独自の構成を提供する開発者の大胆さにフレームワークがびっくりしたことが原因でした。

于 2012-08-23T16:00:15.783 に答える