2016-07-04 10 views
0

可能な重複機能していない:そこHow to set url and root dynamically in extjsMemoryStoreの変更ルートが

こんにちは、私はシンプルなmemoryStoreを持っています。 Ext.Defineでプロキシを宣言しないと、プロキシを設定しても、後で適切なデータルートを取得できません。私は何か間違っているのですか?私は、rootとしてdata_regionIIを取得

var store = Ext.create('Ext.data.Store', { 
    storeId: 'JailNames', 
    autoLoad: true, 
    fields: [ 
     { 
      name: 'name', 
      type: 'string' 
     }, 
    ], 
    data: { 
     data_regionI: [ 
        {name: "Jail 1"}, 
        {name: "Jail 2"}, 
        {name: "Jail 3"}, 
     ], 
     data_regionII: [ 
        {name: "Jail 4"}, 
        {name: "Jail 5"}, 
        {name: "Jail 6"}, 
     ], 
    }, 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json', 
      root: 'data_regionI' 
     } 
    } 
}) 



    store.setProxy({ 
      type: 'memory', 
      reader: { 
       type: 'json', 
       root: 'data_regionII' 
      } 
     }) 

store.load(); 
store.getAt(0).raw //still returns Jail 1 

store.getProxy().reader.rootてみる:

は、ここでのテストケースです。どうして?事前

答えて

1

で おかげで、私はバージョン4.1.1の煎茶フィドルにあなたのコードをコピーした場合、それは店がload()を呼び出した後、すべてのレコードを含むべきではないので、私が期待したものである、Uncaught TypeError: Cannot read property 'raw' of undefinedをスローします。

多くの問題は、店が行い、どのようなプロキシ何をするかをご理解してあります。

  • 通常の店のload機能は、それからレコードを作るために、読者に伝え、データをフェッチするためにプロキシを教えてくれますストアのdataプロパティにロードし、初期化時に定義したデータを上書きします(!)。
  • しかし、メモリストアのロード機能は何もするつもりはなく、まったく使用するつもりはありません。
  • メモリストアは、複数のストアコンテンツを同時に保持することを目的としていません。ただし、未使用のコンテンツは未使用(!)のストアのJavaScriptオブジェクトのプロパティに格納することができます。
  • dataの内容をdataの内容をロードするために、どのプロキシに関係なくストアする場合、dataの内容が初期化後に自動的にストアのデフォルトデータとして使用されます。

しかし、ほんの数行のコードでも達成できます。読みやすさのために作成しただけの機能をすべて作成する必要はありません。

var store = Ext.create('Ext.data.Store', { 
    storeId: 'JailNames', 
    fields: [ 
     { 
      name: 'name', 
      type: 'string' 
     }, 
    ], 
    myData: { // custom property! 
     data_regionI: [ 
        {name: "Jail 1"}, 
        {name: "Jail 2"}, 
        {name: "Jail 3"}, 
     ], 
     data_regionII: [ 
        {name: "Jail 4"}, 
        {name: "Jail 5"}, 
        {name: "Jail 6"}, 
     ], 
    }, 
    loadRegion1:function() { 
     this.loadRegion("data_regionI"); 
    }, 
    loadRegion2:function() { 
     this.loadRegion("data_regionII"); 
    }, 
    loadRegion:function(rootProperty) { // custom function for better readability 
     this.loadRawData(this.myData[rootProperty]); // load data without proxy, but with reader! 
    }, 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 
store.loadRegion1(); 
console.log(store.getAt(0).get("name")); //returns Jail 1 
store.loadRegion2(); 
console.log(store.getAt(0).get("name")); //returns Jail 4 
+0

わかりました。私はあなたがこれによって何を意味したのか理解している。あなたのためのアップ! – niCad

関連する問題