extjs4 アプリケーションを mvc として設計しました。特定の不明確な状況下で、リモート データをコントローラーからストアにロードすると、ビューに変更が反映されないことがあります。これは、コンボボックスとグリッドで発生します。extjs の設計について何かが欠けているようです。この質問で、物事をより明確にしたいと考えています。
私にとってうまくいかないこの例を考えてみましょう:
コントローラー:
...
init: function() {
this.control({
// * This is the alias of a grid panel.
// * When I dbl-click a record, I want to display it in a modal window
'w_fares_index': {
itemdblclick: function(grid, record) {
var view = Ext.widget('w_fares_edit');
view.down('form').loadRecord(record);
var store = this.getStore('StoreBillsModels');
store.load({
params: {
'where': {
"id_fare": record.get('id')
}
}
});
}
},
...
ビュー:
...
extend: 'Ext.window.Window',
alias : 'widget.w_fares_edit',
...
items[{
xtype: 'form',
...
}, {
xtype: 'gridpanel',
store: 'StoreBillsModels',
columns: [{
header: 'Id',
dataIndex: 'id',
flex: 1
}, ...]
}]
このコードにより、新しいモーダル ウィンドウが開き、クリックされたレコードがフォームに読み込まれます。しかし、StoreBillsModels ストアに値が入力されていても (ネットワーク要求を分析しているのがわかります)、新しいウィンドウ内のグリッド パネルにはレコードが表示されません。
さらに、奇妙なことに気付きました:
- StoreBillsModels のサイズが 1 の場合、グリッドには空の白い線が表示されます
- ストア サイズが 0 の場合、グリッドにはヘッダーのみが表示され、高さはありません。
コンボボックスで多かれ少なかれ同じ問題に遭遇しました.ビューを具体化する同じ関数内でストアにデータを入力すると、ストアの消費者はストアの変更を反映しません。
誰か助けてくれませんか?