このthreadはひどく古いと思われるので、私にも同様の質問をさせてください。だから、私はstore
はそうのように定義されている:あなたが見ることができるようにExtJS。レンダリングにストアをロードする
Ext.define('GeoServer.store.ObjectsStore', {
extend: 'Ext.data.TreeStore',
requires: ['GeoServer.model.ObjectsModel'],
model: 'GeoServer.model.ObjectsModel',
autoLoad: false,
proxy: {
type: 'ajax',
url: 'controller/MapsHandler.php',
extraParams: {
action: 'listObjects'
}
}
});
は、それがfalse
からautoLoad
セットを持っています。これは、ページの読み込みに数十のストアをロードしたくないためです。必要なときにロードするだけです。たとえば、この場合、treepanel
が入ったウィンドウを表示すると、このストアをロードする必要があります。
Ext.create("Ext.window.Window",{
title: "Objects",
height: size.height,
width: size.width,
constrainHeader:true,
layout:"fit",
maximizable:true,
items:[{
xtype: 'treepanel',
rootVisible: false,
scrollable: true,
itemId: 'Objects',
store: 'ObjectsStore',
border: false,
autoLoad: true // has no effect
}]
}).show();
しかし、厄介なことは、ウィンドウが最初に現れたとき、木は私がサーバ要求がトリガされていることを確認しても、データが移入されないということです。私はこのウィンドウを表示する方法があります。しかし、2番目、3番目などの時間にウィンドウが表示された場合は、すべて正常です。だから、最初は何が特別で、このautoLoad
プロパティを正しい方法で使うのですか?
一般に、store.loadメソッドを使用して、ビューの「boxready」イベントにストアをロードします。この方法で、ストアがロードされたときにコールバックをコールバックに付加することもできます。 –
は、店舗ではなくアイテム(トレパネル)にオートロードを割り当てるためです。代わりにload()関数を使用してください。 –
@Adrian、私は 'listen':{render:function(){this.store.load()}}'のような 'render'イベントと' afterrender'イベントを試しましたが、この場合はライブラリエラー "r 'は未定義です '。また、最初にツリーにポピュレートされていない – Jacobian