2017-11-08 7 views
0

私の仕事Fiddleajaxプロキシタイプからmemoryに書き換えます。私は手動でmemoryストアデータをロードしようとしている:ExtJS - ajax呼び出し後にストアデータを手動でロードする方法は?

// app/model/Employees.js file 
Ext.define('Fiddle.model.Employees', { 
    extend: 'Ext.data.Model', 
    entityName: 'Employees', 

    fields: [ 
     { 
      name: 'profile_pic' 
     }, 
     { 
      type: 'int', 
      name: 'age' 
     }, 
     { 
      type: 'string', 
      name: 'last', 
      mapping: 'name.last' 
     }, 
     { 
      type: 'string', 
      name: 'first', 
      mapping: 'name.first' 

     }, 
     { 
      type: 'string', 
      name: 'email' 
     } 
    ], 

    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json', 
      rootProperty: 'items', 
      totalProperty: 'total', 
      successProperty: '' 
     } 
    } 
}); 

// app/store/Employees.js file 
Ext.define('Fiddle.store.Employees', { 
    extend: 'Ext.data.Store', 
    pageSize: 30, // items per page 
    alias: 'store.employees', 
    model: 'Fiddle.model.Employees', 
}); 

//app.js fule - launch() function 
var store = Ext.create('Fiddle.store.Employees'); 
console.log(store); 


Ext.Ajax.request({ 
    url: 'mates.json', 
    success: function(resp) { 
     var result = resp.responseText; 
     console.log(result); 
     // store.loadRawData(result); 
     store.loadData(result); 
     console.log(store); 
     console.log(store.getAt(0)); 
    }, 
}); 

その結果、私は、店で私のJSONファイル内のすべてのシンボルを3386件のレコードを持っています。そして、私は最初のレコードとしてコンソールに何を参照してください:私が間違ってやっている何

enter image description here

そして、どこにproxy行を置く必要がありますか?

答えて

0

は、この方法でそれをやった:店舗autoLoad: true

//in Grid panel js file 
listeners: { 
    afterrender: function(grid, evt) { 

     var myStore = grid.getStore(); 

     Ext.Ajax.request({ 
      url: 'mates.json', 
      success: function(resp) { 
       var result = Ext.decode(resp.responseText); 
       myStore.getProxy().data = result; 
       myStore.load(); 
      }, 
     }); 

    } 
} 

を無効にする必要があります。 store.loadRawData(result);の代わりにこの方法でロードすると、pagingtoolbarに正しいレコード数が表示されます。

+0

なぜこれをやっていますか?ストアにajax経由でデータをロードさせるだけです。 –

+0

@EvanTrimboli私はjsonファイル(書き込み操作なし)からデータを一度読み込む必要があるので、私は 'memory'型を使い、Ajaxで手動でデータを読み込みます。 – Sogl

+1

それはちょうどそれをより難しくしています。ストアにajaxプロキシを設定し、それをautoLoadします。 –

1

responseTextは、シリアル化されたJSONデータを含む文字列です。

var result = Ext.decode(resp.responseText); 
store.loadRawData(result); 

loadDataloadRawDataは、モデル上のコンバータを呼び出さないことloadDataで異なる:あなたが店にモデルコンバータを通じてオブジェクトをロードするためにloadRawDataを使用する前に、オブジェクトにそれをデシリアライズする必要があります。 loadRawDataはajaxプロキシと同じですが、loadDataはそうではありません。

+0

ありがとうございます。私はちょっと違ったことをしました。自分の答えを見てください。しかし、私はこの事のためにグリッド・イベントを正しく選択したかどうかわかりません=) – Sogl

関連する問題