2016-11-14 5 views
1

Я пытаюсь нажать новую запись в объект-магазин, используя инфраструктуру dojo. иерархия выглядит следующим образом:push data в dojo objectstore

 
Job Type 
    job1 
    job2 
    job3 
    job4 

Теперь я хочу, чтобы вставить новую работу job6 и разместить его на первом с помощью JavaScript. Я использую опцию before в соответствии с инфраструктурой dojo. Однако я не могу этого сделать. Ниже приведен фрагмент кода:

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

ответ

0

обновление:before указан в качестве члена PutDirectives в спецификации API, но не на самом деле реализуется в put() code (я проверил магазин памяти и DataStore). Новые элементы просто добавляются до конца.

Есть два обходных:

  1. Рассмотрим магазин не-упорядоченная коллекция и использовать другие способы сортировки (как sortInfo свойство DataGrids). Это будет зависеть от того, как вы используете магазин. Вероятно, это лучший вариант, поскольку в магазине не должно быть какой-либо структуры, кроме мешка с идентификаторами. Опция before может быть просто остатком предыдущей версии Dojo.
  2. Используйте ручную манипуляцию массива и Memory.setData(), чтобы изменить магазин. Это предполагает использование хранилища памяти. (См код ниже)
  3. Bonus обходным: изменить магазин додзё, чтобы почтить 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: вам нужно будет предоставить дополнительную информацию в своем вопросе. Что вы видите? (как вы визуализируете магазин?) Какой API-интерфейс Dojo вы используете, точно? (dojo.data.ObjectStore, dojo/store ... почему бы не dstore?). [jsfiddle] (https://jsfiddle.net/), который воспроизводит вашу проблему, действительно поможет. – Leftium

+0

@ user2582322: Я обновил свой ответ кодом для работы, который работает. – Leftium