簡體   English   中英

Dojo FilteringSelect加載數據

[英]Dojo FilteringSelect load data

我在下面有以下代碼,它將創建一個FilteringSelect並設置第一個選定的項目:

// Store initialization:
var jsonStore = custom.store.JsonRest({ ... });
var memoryStore = dojo.store.Memory();
var myStore = dojo.store.Cache( jsonStore, memoryStore);
var dataStore = custom.store.MyObjStore({ objectStore: myStore, ...  });

// FilteringSelect initialization:
var fsel = new dijit.form.FilteringSelect({
             id: 'fsel',
             searchAttr: 'id',
             store: dataStore
           });

// Setting the first item on FilteringSelect, retrieved from store objects
fsel.store.fetch({ query: {id:""},
  onComplete: function (items, request) {
    var val = "";
    if (items.length>0) val = items[0].id;
    fsel.set('value', val);
  }
});
  1. 第一個問題是,如果items[0].id = 0 ,則此項目未在FilteringSelect上設置。

  2. fsel.store.fetch({ ... })查詢服務器,這沒關系。 問題是檢索到的項目不會保留在內存中,或者它們是,但在下一個事件中不會被FilteringSelect檢索。 我的意思是,當我第一次點擊FilteringSelect的下拉列表時,會向服務器發送另一個查詢以獲取項目,以下時間是從內存中獲取的。

誰能幫我解決這兩個問題?

注意:我使用的是Dojo 1.7.2版(27913)。

在與道場的某人談話后,我通過以下方式解決了我的問題:

  1. 切換到上一個版本( 1.8.1 ),修復了第一個問題。

  2. FilteringSelect上使用memoryStore而不是緩存存儲( myStore ),只會使用內存中的對象。 myStore (緩存存儲)上進行查詢會將對象從服務器加載到內存。

// Store initialization:
var jsonStore = new JsonRest({ ... });
var memoryStore = new Memory();
var myStore = new Cache(jsonStore, memoryStore);
// Note: ObjectStore was removed.

// FilteringSelect initialization:
var fsel = new FilteringSelect({
         id: 'fsel',
         searchAttr: 'id',
         store: memoryStore
       });

// Setting the first item on FilteringSelect and loading items to memory
when (myStore.query({id:""}),
  function (items, request) {
    var val = "";
    if (items.length>0) val = items[0].id;
    fsel.set('value', val);
  }
);

暫無
暫無

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

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