2012-08-23 9 views
5

私はextjs 4 MVCアプリケーションに取り組んでいます。複数のリロードをしないでEXT JS 4 MVCアプリケーションにストアを再利用する方法は?

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

私は1店舗を複数回使用していhttp://wap7.ru/folio/ext-reuseable-store/TE.html

で私sandboxsを参照してください ストアのautoloadで構成された(例えば、トップメニューのコンボボックス内の1つのタブ、clietnsグリッド内の別。):真。 モデルにプロキシが設定されています。

私の問題:ストアはコントローラー[店舗]アレイ内のすべての言及で何度でもロードされます。

それが店を述べたが、私は、配列からの1つを削除[店舗] controller-コンボボックスが空になる場合:Ext.getStore(「STORE-ID」)

は私のヒント、又は例を教えてくださいここでのStore(モデルではない)を再利用http://docs.sencha.com/ext-js/4-0/#!/guide/mvc_pt2

+0

コードを投稿すると、これをより簡単に診断するのに役立ちます。 –

+0

@Lev、解決策はありますか?私は現在、この問題に取り残されています。下の答えは店舗の負荷に関係していますが、モデルの関連付けや複数の店舗に関するこの問題が疑わしいです。オブジェクトグラフから独立したストアを持ち、コントローラーで手動でフィルターを呼び出す必要がない限り、マスターデータを表示することは簡単ではありません。 – CallMeLaNN

+0

本当にありません。あなたはいつかここでコメントを投稿したいと思っています。 –

答えて

1

ストアをインスタンス化してロードし、オートロードを削除することができます。

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

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

+0

Ext.application.launch()でこれを行おうとしました --------------- ストアは一度読み込まれましたが、グリッドとコンボボックスの両方が空です –

0

これは、通常、他のコントローラからお店を呼び出すために正常に動作します:

Ext.getStore('PlatformClient'); 

私は複数のコントローラstores配列に同じ店を入れてみましたことがありません。それは私には奇妙に思える。

あなたが投稿したコードについては、いくつかの奇妙な点があります。たぶんそれらは単にタイプミスであり、おそらくフレームワークに何の違いもありませんが、 LLそれらを指摘する:

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

models:[ 
'te.store.PlatformClient' 

], 

1はおそらくタイプミスであること。

第2に、私はストアアレイに完全な名前空間を入れません。これは違いがないかもしれませんが、分かりません。たぶんExtJSはあなたが書いた名前空間の上にネームスペースを追加しているので、新しいコントローラを初期化するときに別のストアをインスタンス化してリロードさせると思うかもしれません。たとえば、これは何のためにそれは価値があるより多くの「普通」である:

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

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

また、MVCストア用にstoreIdの設定を定義する必要がないことについて、ドキュメントで少し気にしておきたいと思います。フレームワークは自動的店この与える:あなたの例ではそう

storeId: [StoreClassName] 

を、あなたはこれを自動的に得るでしょう:他に

storeId: 'PlatformClient' 

誰かがtrouble with MVC stores recentlyを持っていたし、それは大胆で仰天しているフレームワークにさかのぼります自分のstoreId configにMVCパターンを提供している開発者のものです。

+0

1. 'te.store .PlatformClient'はタイプでした。 2. –

+0

ここに自分のコードを入れました。 [リンク](http://wap7.ru/folio/ext-reuseable-store/TE.html)をご覧ください –

0

以前は、読み込みに似た問題がありました。同じストアを複数使用した場合のフィルタリングに関する問題もあります(フィルタを1つに設定したいが、別のセットには設定したくない場合があります)。したがって、アプリケーションの起動時にすべてのストアをロードします。次に、目的を表示するためにそのストアを必要とするときはいつでも、オリジナルを使用する代わりに、以下のように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; 

} 

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

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

関連する問題