2012-10-26 91 views
1

我在下面下面的代碼,這將創建一個是FilteringSelect並設置第一選擇的項目:道場是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)。

+0

'VAL =項[0] .ID [0];'應該這樣做。商店值以數組的形式呈現。 – undefined

+0

請問您可以告訴我們您正在使用哪種版本的dojo。 – undefined

+0

'id'是對象的一個​​屬性,我得到了商店中的第一件商品,所以'items [0]'。 我忘了提及的版本,我用**道場1.7.2(27913)**。 –

回答

4

從道場的人談話後,我解決我的問題的方式如下:

  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); 
    } 
);