Пример с Sencha работает нормально и загружает данные по запросу, как вы хотите.
Вопрос в том, нужно ли загружать новые данные.
Так что в этом примере это не нужно, потому что независимо от того, какие параметры вы передаете dataUrl, он всегда будет возвращать полное загруженное дерево.
Но если в дереве есть узел без дочерних элементов и вы явно не говорите, что это лист, то при развертывании этого узла он совершит новый вызов dataUrl с параметром идентификатора узла .
Вы несете ответственность за возвращение правильных данных из своего бэкэнда как при начальной загрузке всех родительских узлов, так и при каждом расширении нового узла.
Вы можете проверить, работает ли он, просто удалив все дочерние элементы из любого узла, вы увидите, что когда этот узел будет расширен, он выполнит запрос Ajax для новых узлов (я думаю, что по умолчанию используется метод POST).
Простой пример настройки метода запроса и baseParams для передачи в запросе вместе с идентификатором узла:
var tree = new Ext.ux.tree.TreeGrid({
renderTo: "outputDiv",
loader: new Ext.ux.tree.TreeGridLoader({
dataUrl: "general-data",
requestMethod: "GET",
baseParams: {
fromDate: "2010-01-01",
toDate: "2010-01-01",
dateField: "systemDate"
}
}),
columns:[{
header: "Customer",
dataIndex: "customer"
},{
header: "Order",
dataIndex: "orderNumber"
},{
header: "Order Line",
dataIndex: "orderLine"
},{
header: "Item",
dataIndex: "itemNumber"
}]
});
Вы также можете добавить атрибуты узла в виде параметров:
tree.getLoader.on("beforeload", function(treeLoader, node) {
this.baseParams.customer = node.attributes.customer;
}, this);