将数据推送到dojo对象库

时间:2016-11-14 11:27:25

标签: javascript dojo

我正在尝试使用dojo框架将新条目推送到objectstore。 层次结构如下所示:

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

1 个答案:

答案 0 :(得分:0)

更新: before在API规范中列为PutDirectives的成员,但实际上并未在put() code中实现(我已检查过内存)存储和DataStore)。新项目简单地附加到最后。

有两种解决方法:

  1. 考虑存储一个非有序集合并使用其他排序方法(如DataGridssortInfo属性)。这取决于您如何使用商店。这可能是最好的选择,因为商店不应该有任何结构,而不是一袋id。 before选项可能只是以前版本的Dojo中的残余。
  2. 使用手动数组操作和Memory.setData()修改商店。这假定使用Memory存储。 (见下面的代码)
  3. 奖励解决方法:修改Dojo的商店以兑现before选项
  4. 使用手动数组操作和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>