2012-06-20 8 views
0

Мне нужно загрузить данные в свой treestore. Мой запрос ajax дает мне данные XML без атрибута листа и текста. Как я могу их сопоставить?Загрузить xml в extjs4 treestore

<items> 
    <item>mytext</item> 
    <item>mytext2</item> 
    ... 
</items> 

Я знаю лист собственности, но для текста я пытался отображение в моей модели:

fields: [ 
    { name: 'leaf' , type: 'boolean' , defaultValue: true } , 
    { name: 'text', mapping: 'item'}, 
] 

и читателя в моем прокси-магазине:

reader: { type: 'xml',root: 'items' , record: 'item' } 

У меня есть все узлы, но без текста =/

Пожалуйста, помогите!

-kyrillos

ответ

0

Я нашел другое решение:

fields: [ 
    { name: 'leaf' , type: 'boolean' , defaultValue: true } , 
    { name: 'text', mapping: '/' } 
] 
+0

Ух ты, я забыл, что вы могли бы сделать это с запросом йота. Хороший и элегантный, как должно быть! – Reimius

1

Глядя на исходный код, проблема заключается в том, что Extjs 4 ожидает модель, чтобы иметь вложенные элементы, и ваш XML имеет данные на самом верхнем уровне модели. Вы должны либо реструктурировать XML-вернулся к чему-то вроде этого:

<items> 
    <item> 
     <text>mytext</text> 
    </item> 
    <item> 
     <text>mytext</text> 
    </item> 
    ... 
</items> 

и использовать отображение в текстовом узле, который находится там.

Другой вариант - создать настраиваемую функцию сопоставления, которая будет работать с вашей структурой (возможно, не так, как вам хотелось бы сделать это с помощью Extjs, но если вы не можете изменить xml, это единственный способ):

fields: [ 
    { name: 'leaf' , type: 'boolean' , defaultValue: true } , 
    { name: 'text', mapping: function(node){ 
     if(node.firstChild && node.firstChild.nodeValue) 
      return node.firstChild.nodeValue; 
     return ""; 
    }}, 
] 
+0

Я нашел другое решение: –