2016-10-27 20 views
0

この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プロパティを正しい方法で使うのですか?

+1

一般に、store.loadメソッドを使用して、ビューの「boxready」イベントにストアをロードします。この方法で、ストアがロードされたときにコールバックをコールバックに付加することもできます。 –

+0

は、店舗ではなくアイテム(トレパネル)にオートロードを割り当てるためです。代わりにload()関数を使用してください。 –

+0

@Adrian、私は 'listen':{render:function(){this.store.load()}}'のような 'render'イベントと' afterrender'イベントを試しましたが、この場合はライブラリエラー "r 'は未定義です '。また、最初にツリーにポピュレートされていない – Jacobian

答えて

2

アプリケーション開始時にストアをロードするには、ストアでautoloadをtrueにする必要があります。

var store=Ext.getStore('ObjectsStore'), 
     view=this.getView(); 
    view.mask('loading'); 
    store.on('load',function(){ 
     view.unmask(); 
     YourWindow.show(); 
    }); 
    store.load(); 

それとも、前にレンダリングリスナーに店舗をロードしようとすることができます:

あなたが店の負荷に2つの機会、ショーウィンドウを持っている私の意見で

listeners:{ 
    beforerender: function(){ 
     Ext.getStore('ObjectsStore').load(); 
    } 
} 

最善の解決策は、最初にストアは非同期ロードを行うので、ロード時にツリーパネルが常に表示されます。

+1

ありがとう!私は1分後にそれをチェックします。 – Jacobian

+0

ext.getStoreで取得するにはstoreIdを自分の店舗に設定する必要があります –

関連する問題