私は Ext を初めて使用し、モデル ストアとプロキシを理解するのに苦労しています。
サーバーは 1 つの大きな JSON オブジェクトを返します。例えば。
{
"responseHeader":{
"status":0,
"QTime":12,
"params":{
"facet":"true",
"facet.limit":"40"
}
},
"response":{
"numFound":3806,
"start":0,
"docs":[
{
//Lots of fields
"id":"1234",
...
//Some array properties
"testfield":[
"",
""
],
...
}
]
},
"facet_counts":{
"facet_queries":{
"email":3806
},
"facet_fields":{
"emailaddress":{
},
"subject":{
"candles":136,
"filter":130
},
"fromemail":{
},
//...
},
"facet_dates":{ },
"facet_ranges":{}
},
"highlighting":{
"some doc id":{
"emailtext":[ " Tel.: blah blah <em>blah</em>" ],
"combined":[ "<em>Email</em> To: blah blah blah" ]
}
}
}
このデータを複数回ロードしたくありません。このオブジェクト (docs オブジェクトなど) からデータを取得して、グリッドに配置したいと考えています。次に、別のパーツを引き出してセレクトボックスに入れます。
このデータを 1 回ロードして、そこからモデルとストアを作成してグリッドと選択ボックスに渡すにはどうすればよいですか?
私が読んだことから、プロキシはサーバーの応答を保持していますか? そこで、ストアの外にプロキシを作成してみました。複数のストアで同じプロキシを使用できると考えています。
var myProxy1 = Ext.create('Ext.data.proxy.Proxy', {
type: 'ajax',
url : '../test',
reader: {
type: 'json',
root: 'responseHeader'
}
});
しかし、myProxy1 をストアに渡すと
Ext.define('Test', {
extend: 'Ext.data.Model',
fields: [
{name: 'status', type: 'int'},
{name: 'QTime', type: 'int'},
{name: 'param', type: 'auto'}
]
});
var myStore = Ext.create('Ext.data.Store', {
model: 'Test',
proxy: myProxy1,
autoLoad: true,
listeners:{
load: function( ths, records, successful, operation, eOpts ){
debugger;
}
}
});
うまくいきません。load イベントは発生しません。データは読み込まれません。プロキシがリクエストを作成したことがわかります。サーバーからのレスポンスが表示されますが、読み込まれません。
プロキシをインラインにすると、ロードされます。
var myStore = Ext.create('Ext.data.Store', {
model: 'Test',
proxy:{
type: 'ajax',
url : '../test',
reader: {
type: 'json',
root: 'responseHeader'
}
},
autoLoad: true,
listeners:{
load:function( ths, records, successful, operation, eOpts ){
debugger;
}
}
});
1 つのプロキシを使用して複数のストアに接続し、ストアをロードする前にリーダーを変更するだけでよいと考えていました。