2016-11-14 137 views
1

我正嘗試使用dojo框架將新條目推送到對象存儲。 層次結構看上去象下面這樣:將數據推入dojo對象存儲

 
Job Type 
    job1 
    job2 
    job3 
    job4 

現在,我要插入一個新的工作job6,並將其放置在第一個使用JavaScript。按照dojo框架使用before選項。但是,我無法這樣做。下面是代碼片段:

objectStore.put({ 
    id: unid, 
    name: unid.replace(typ,''), 
    type:typ, 
    before: "job1", 
    project:"jobs", 
    parent:typ 
}); 

回答

0

更新:before被列爲在API規格PutDirectives的成員,但它實際上並不在put() code實現(I檢查存儲器存儲和DataStore)。新項目簡單地附加到最後。

有兩種解決方法:

  1. 考慮商店的非有序集合,並使用其他手段排序(像DataGridssortInfo屬性)的。這將取決於您如何使用商店。這可能是最好的選擇,因爲商店不應該具有除了一袋ID之外的任何結構。 before選項可能只是來自以前版本Dojo的補遺。
  2. 使用手動數組操作和Memory.setData()修改商店。這假定使用內存存儲。 (請參見下面的代碼)
  3. 獎金變通辦法:修改Dojo的商店兌現before選項

使用手動陣列處理和Memory.setData()至修改店:

require(["dojo/store/Memory"], function(Memory) { 
 
    // Initialize 
 
    var data = [ 
 
    {id: "job1", name: "Job 1"}, 
 
    {id: "job2", name: "Job 2"}, 
 
    ]; 
 
    objectStore = new Memory({data: data}); 
 
    
 
    console.log('BEFORE insert:'); 
 
    console.log(objectStore.data); 
 

 
    // Get data from store as array 
 
    var tmpData = objectStore.data; 
 
    
 
    // Modify array: insert new item at beginning 
 
    var newObject = {id: "job3", name: "New Job"}; 
 
    tmpData.unshift(newObject); 
 
    
 
    // Set data of objectStore to newly modified array 
 
    objectStore.setData(tmpData); 
 
    
 
    console.log('AFTER insert:'); 
 
    console.log(objectStore.data); 
 

 
});
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>

+0

沒有好友。它不會放置這個工作,但是當我刷新頁面時,它會按照排序順序排列 – user2582322

+0

@ user2582322:您將不得不在問題中提供更多信息。你在看什麼? (您如何形象化商店?)您正在使用哪種Dojo API? (dojo.data.ObjectStore,dojo/store ...爲什麼不用dstore?)一個[jsfiddle](https://jsfiddle.net/)重現你的問題真的會有所幫助。 – Leftium

+0

@ user2582322:我更新了自己的答案,並提供了適用於解決方法的代碼。 – Leftium