2012-08-26 36 views
-1

我有一個帶有ItemFileWriteStore的EnhancedGrid。在grid上調用startup()之後,我使用下面的代碼隱藏它:更改ItemFileWriteStore URL,獲取數據並刷新Grid

dojo.style(grid.domNode,'display','none');

,然後一鍵點擊,我改變存儲的URL爲這個網格和嘗試刷新存儲和使用下面的代碼顯示網格:

store.save(); 
store.close(); 
store.url='AjaxPopulate.json?os_type='+dijit.byId('osType').get('value'); 
store.save(); 

store.fetch({query:{id: '*'}}); 
dojo.style(grid.domNode, 'display', ''); 
grid.store.close(); 
grid.setStore(store); 

上面的代碼工作正常Firefox和Chrome,但不在IE8和IE9上。我只是在IE Developer工具控制檯中收到「Object Error」消息。

請注意。幫助我識別上述代碼的任何問題。

+0

m8上沒有太多可以使用的東西。它可以是在運行代碼時未定義的變量; 'store,grid,grid.store'。它最有可能是一個缺陷:'dijit.byId('osType')。get('value')' – mschr

回答

-1

問題是我的無效JSON來自服務器並帶有一個額外的逗號。

IE對這些東西非常具體。

感謝大家誰查看並試圖回覆。

+0

這不是一個答案。你需要把它放到註釋部分 –

1

Howto reload store

如果使用的是「數據」屬性來店開始(通過構造函數),你應該設置clearOnClose: true爲好。

.save()的使用僅適用於某些ItemFileWriteStore更改了一些設置(isDirty)並需要將這些設置傳播到服務器。也就是說,你不需要在關閉的商店中儲存(allthough url已經改變,沒有提取已經運行,並且肯定沒有項目已經改變)。

請嘗試下面的代碼,你只需要grid組件就可以做到這一點,因爲在網格上調用.render()會讓它重新加載它的數據。

// save if dirty, otherwise we cannot close a store unless its reset 
grid.store.save(); 
// close store, this should clear data 
grid.store.close(); 
// set new URL 
grid.store.url = '??'; 
// rerun fetch XHR 
// reload grid data with new items (no need to setStore as its same object reused) 
grid.store.fetch({query:{id: '*'}, onComplete: function() {grid.render}});