2014-04-28 27 views
0

我有一個問題。我在dojo上編寫了一個ComboBox,如果用戶正在編寫一個尚未在商店中的選項,它將被添加。Dojo內存setData不會設置數據

我已經寫了一個keyup事件,它會被觸發,如果用戶點擊返回鍵或回車

if(pressed.keyCode == keys.ENTER){ 
       //var dtemp = dijit.byId("stateSelect").get("store"); 
       var MyMemory = new myownclass(); 
       var value = dijit.byId('stateSelect').get('value'); 
       var isNew = true; 
       var d = new Memory({data : []}); 
       for(var vi = 0; MyMemory.data[vi].name != "";vi++) 
       { 
        d.put({name : MyMemory.data[vi].name, id : MyMemory.data[vi].id}); 
       } 
       for(var index = 0; index < d.length ; index++) 
       { 
        if(value == d[index].name) 
        { 
         //alert(value); 
         isNew = false; 
        } 
        //isNew = true; 
       } 
       if(isNew == true){ 
        MyMemory.setdata(value); 
        //var newData = new myownclass(); 
        d.put({name : value, id : vi}); 
        //dijit.byId('stateSelect').get('store').reset(); 
        dijit.byId('stateSelect').get('store').setData(d); 

       } 
      } 
      if(pressed.keyCode == keys.F2){ 
       var MyMemory = new myownclass(); 
       var value = dijit.byId('stateSelect').get('value'); 
        MyMemory.deletedata(value); 
        //var temp = new myownclass(); 
        //dijit.byId('stateSelect').get('store').remove(dijit.byId('stateSelect').get('store').get('id')); 

      } 

的問題是,它不希望與新店d,以取代舊店!相反,組合框完全是空的:(

變種d具有內部 Firebug Screen

誰知道爲什麼它不會顯示該選項的內容?

感謝您的幫助

+0

爲什麼你設置數據存儲每一次。相反,您可以使用內存存儲的「添加」和「刪除」方法,該方法整潔而圓滑。 –

回答

1

因爲你使用的是setData()不正確,setData()需要插入一個對象數組,然而,你用它來插入d,這是一個獨立存儲,所以,correc通過使用將通過設置數據的牛逼方式:

dijit.byId('stateSelect').get('store').setData(d.query()); 

因爲如果你使用query()功能不帶參數,它將返回店內的所有對象(如數組)。

但是,你也可以直接通過改變組合框的店:

dijit.byId('stateSelect').set('store', d); 

Here的應用商店二傳手一個簡單的例子。

+0

Memory.remove(1)< - 刪除第二個對象或刪除id = 1的項目? – SepGuest

+0

獲得此信息的最佳來源是查看API文檔,其中說明「通過其標識刪除對象」。所以這是'id = 1'的項目。 – g00glen00b