#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 /