2017-05-15 3 views
1

ExtJSでのデータモデリングのしくみを理解しようとしています。ExtJS6/Sencha個別のajax呼び出しでストアデータをロードする

私のサーバーは、このようなデータを2回の別々のajax呼び出しで返します。

ID id_category名説明

セカンドAJAX呼び出し、getCategories()を返します:

最初の呼び出し、getProducts()はそのような何かを返す

id名

もちろん、テーブルに「製品」データを表示したいと思います。 私はすでにモデルとストアを使ってそれを行うことができますが、私のテーブルではまだid_categoryが表示されています。そこにcategory_nameを表示したいと思います。

モデルアソシエーションとhasOne関係を使用してこれを実行しようとしましたが、データが2回の別々のajax呼び出しでフェッチされるため、動作していないようです。

私は、各列に「レンダリング」機能を使用する必要があることを理解しました。 (私は正しいですか?) これも可能ですが、今はすべての列でajaxコールが行われています.1つのajax呼び出しでカテゴリ名を取得することになります。

jQueryでは、私は単にそれを行うでしょう。 私はまずgetProducts()を実行してからgetCategories()を実行し、すべてのカテゴリを繰り返して適切なカテゴリ名を見つけます。

Sencha でそれを行う方法を手に入れてはいけません(もちろんパターンは似ているはずです)。

誰かがそれを理解するのを助けることができれば、本当に感謝します。

答えて

1

あなたは正しいです。 id_categoryの列にレンダラーを使用する必要があります。私は、例えばstore_productsとstore_categoryの2つの別々の店があると仮定します。あなたはajax呼び出しでデータを埋めます。 (hasOne関係は必要ありません)。 store_productsは、製品データをグリッド/テーブルに表示するために使用されます。今レンダラ何を行うことができますが、

{ 
    text : 'Category' 
    renderer : function(val) {   
    { 
     var category_record = store_category.findRecord("id_category", val, 0, false, false, true); 
     if(category_record){ 
     return category_record.get('category_name'); 
     } 
     else{ 
     return val;      
     }   
    } 
    dataIndex : 'id_category', 

} 

だからあなたはstore_categoryでのAjaxメソッドに、各行ごとの時間を呼び出していないさで、代わりに、ストアがすでにデータを表示する前に移入されます。列をレンダリングしている間は、単純にレコードを見つけてidの代わりに名前を返します。

+0

素早く詳細な回答ありがとう –

+0

私はたくさん助けてくれました。 –

関連する問題