簡體   English   中英

使用異步數據更新Dojo Dijit FilteringSelect的商店

[英]Updating Dojo Dijit FilteringSelect's store with asynchonous data

我在Intranet上下文中使用Zend + Dojo表單。 當表單上的選定狀態更改時,我們需要更新縣列表。 使用HTML,您只需解析json響應(或僅提供選項的html片段)並更新select的innerhtml。 但是,事實證明,在Dojo中這樣做非常復雜。

簡而言之,我定義了一個通用方法,該方法允許您將onBlur更新設置為表單字段。 這鏈接到Controller動作,該動作使用函數參數調用數據庫,並獲取單例響應(我們已經處理好了)或列表響應。 如果返回列表,則需要更改帶有該列表的select中的選項。

到目前為止,所有這些工作都很好。 我們得到一個有效的json響應,並在response.data中列出了一個不錯的列表。 這就是問題所在。 如何簡單地更新現有商店(檢查發現它是_comboBoxDataStore)? 我無法使用其他類型的商店來聲明選擇,因為它是自動生成的。

有沒有辦法強行換購商店? 主要的關鍵是我所做的一切都必須在Internet Explorer中起作用。 我使用Firefox只是為了更好地了解正在使用的對象。

作為附帶的問題,有人知道為什么_comboBoxDataStore無法更新嗎? 其他框架允許對商店進行相當無縫的更新,例如extJS。 在組合框中設計一個限制以使其無法更新,這比原始HTML少了些什么? 還是我錯過了不涉及雜耍深奧對象的明顯解決方案?

基於RiverC的帖子,我的更新組合的方法可以正常運行,如下所示:

, updateData : function(data) {
    var storeData = {data: data, id:'attrFilterStore'};
    var newStore = new dojo.data.ItemFileWriteStore({data: data});
    this.element.store = newStore;
    this.element.startup();
}

其中“ this.element ”是對FilteringSelect對象的引用。
方法“ updateData ”是來自ajax請求的回調函數,該請求接收具有RiverC發布結構的JSON。

您甚至可以使用選項。

var fldSelect = dijit.byId("fieldSelect");
fldSelect.options = fldoptions;
fldSelect.startup();

fldoptions是需要填充的新數據。 請記住:不要忘記調用fldSelect.startup() ,否則數據將不會更新。

碰巧的是,這是有可能的,盡管我所見過的任何教程都沒有顯示出實際上是多么容易。

確保這是某處:

dojo.require("dojo.data.ItemFileWriteStore");

然后,無論您的filterSelect如何出現,您都可以執行以下操作:

newStore = new dojo.data.ItemFileWriteStore({
    data:{
         identifier: 'id',
         label: 'name',
         items: response.data
    }
});

filteringSelect.store = newStore;
filteringSelect.startup();

如果可以控制_comboBoxDataStore的創建,則可以在該商店上將clearOnClose設置為true。 然后,您可以關閉該存儲並將url或data屬性設置為新數據(請注意,僅dojo 1.4及更高版本支持在clearOnClose之后使用data屬性)。 這將使用新數據自動更新select / combobx小部件

有關示例,請參閱: http : //soularis999.blogspot.com/2011/03/reloading-dojodataitemfilereadstore.html

如果您無法設置clearOnClose(由於Zend框架擁有它,而沒有選擇修改該行為的選項),則可以創建一個新的數據存儲並將組合框的數據存儲設置為新創建的數據存儲。 dijitfilteringselect和combobox提供了可以修改的存儲屬性。

作為一種完全不同的方法,您可能希望針對此類用例使用dojo過濾小部件的“ query”屬性-它們非常有用,可減少所需的代碼和管理量。

請參閱下面的URL,以獲取有關如何通過修改filterselect的查詢過濾器來基於國家/地區選擇來更改狀態的示例。http://livedocs.dojotoolkit.org/dijit/form/FilteringSelect

另外,從您的用例描述中,聽起來好像dijit filterSelect可能是一個比組合框更好的窗口小部件選擇(由於它是縣列表,您是否希望用戶能夠輸入列表中不存在的任何縣)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM