Создать dojo.store.memory с использованием XML?

#javascript #xml #dojo.gridx #dojo

#javascript #xml #dojo.gridx #dojo

Вопрос:

Мои данные изначально хранятся в XML-файле, структурированном следующим образом (с набором объектов, строк в каждом объекте и ячеек в каждой строке)

     <entity i=1>
        <row i =1>
           <cell i=1>
           <cell i=2>
        </row>

        <row i=2>
           <cell i=1>
           <cell i=2>
        </row>
    </entity>
  

Пример, который я прочитал из руководства dojo, таков:

     require([

    'dojo/store/Memory',
    'gridx/Grid',
    'gridx/core/model/cache/Sync'
    ], function(Store, Grid, Cache){
  var store = new Store({
    data: [
        {id: 1, title: 'Hey There', artist: 'Bette Midler'},
        {id: 2, title: 'Love or Confusion', artist: 'Jimi Hendrix'},
        {id: 3, title: 'Sugar Street', artist: 'Andy Narell'}
    ]
});
......
});
  

Как я должен создать хранилище dojo с помощью таблицы стилей XML? Должен ли я использовать встроенный javascript в моей таблице стилей XML?

Ответ №1:

Ну, вы могли бы использовать dojo/query модуль для итерации по вашему XML-документу. Единственное, что вам нужно сделать сначала, это проанализировать ваш XML (если он еще не создан), например:

 require([ "dojo/query", "dojox/xml/parser", "dojo/dom-attr" ], function(query, xml, domAttr) {
    var content = xml.parse("<entity><row i="1"><cell i="1">Cell 1</cell><cell i="2">Cell 2</cell></row><row i="2"><cell i="1">Cell 3</cell><cell i="2">Cell 4</cell></row></entity>");
    var out = query("row", content).map(function(node) {
        var data = {};
        query("cell", node).forEach(function(cell) {
            data[domAttr.get(cell, "i")] = cell.textContent;
        });
        return data;
    });
    console.log(out);
});
  

Это приведет к созданию массива из двух объектов, где значением i атрибута является имя свойства, а текстовым содержимым <cell> элемента является значение.

 [{
  "1": "Cell 1",
  "2": "Cell 2"
}, {
  "1": "Cell 3",
  "2": "Cell 4"
}]
  

Который затем можно использовать в хранилище.

Полный пример можно найти на JSFiddle: http://jsfiddle.net/bUjN7 /