Я задавал этот вопрос на форумах Ext JS, но не получил ответов, поэтому я спрашиваю здесь.
У меня есть TreePanel (код ниже), который использует TreeLoader и AsyncTreeNode. В моем методе API, указанном в dataUrl TreeLoader, я возвращаю массив JSON для заполнения дерева.
Это прекрасно работает, конечно. Однако мне нужно вернуть дополнительный элемент - целое число - в дополнение к массиву, и мне нужно отобразить это значение где-то еще в моем пользовательском интерфейсе. Это возможно? Если нет, то что еще было бы хорошим решением?
Вот код, который у меня сейчас есть:
tree = new Ext.tree.TreePanel({
enableDD: true,
rootVisible: false,
useArrows: true,
loader: new Ext.tree.TreeLoader({
dataUrl: '/api/method'
}),
root: new Ext.tree.AsyncTreeNode()
});
Я хочу вернуть одно целочисленное значение для всего ответа, а не для каждого узла. В основном мой метод API создаст запись базы данных, и мне нужно вернуть значение из этой записи базы данных.
РЕДАКТИРОВАТЬ Благодаря Майку, я решил эту проблему. Я расширил класс Ext.tree.TreeLoader следующим образом:
TreeLoaderWithMetaData = Ext.extend(Ext.tree.TreeLoader, {
processResponse : function(response, node, callback) {
var json = response.responseText;
try {
var o = eval("("+json+")");
metaData = o.shift();
node.beginUpdate();
for(var i=0, len=o.length; i<len; i++) {
var n = this.createNode(o[i]);
if (n) {
node.appendChild(n);
}
}
node.endUpdate();
if(typeof callback == "function") {
callback(this, node);
}
}
catch (e) {
this.handleFailure(response);
}
}
});
И тогда я могу ссылаться на переменные в метаданных, например на открытые члены: metaData.my_variable1, metaData.my_variable2. Мои данные AJAX с сервера просто содержат дополнительный элемент массива:
[{"my_variable1":"value1","my_variable2":"value2"},{"id":"node1","text":"Node 1",children:[{"id":"node1nodeA","text":"Node 1 Node A"}]]