#jquery #kendo-ui #hierarchical-data #kendo-treeview #kendo-datasource
#jquery #kendo-пользовательский интерфейс #иерархический-данные #kendo-просмотр дерева #kendo-источник данных
Вопрос:
Я пытаюсь выполнить поиск элемента внутри иерархического источника данных Kendo. Это необходимо для получения uid этого элемента и для того, чтобы узел этого элемента в Kendo Treeview был выбран программно.
Вот код. Простите меня за неаккуратный алгоритм.
function findTreeviewNodeById(haystack, needle) {
var uid = null;
for (var i = 0; i < haystack.length; i ) {
if (haystack[i].id == needle) {
uid = haystack[i];
}
else if (haystack[i].hasChildren) {
uid = findTreeviewNodeById(haystack[i].children.data(), needle);
}
if (uid != null)
break;
}
return uid;
}
Приведенный выше код работает только для иерархического источника данных с уровнем глубины 2. Если я попытаюсь скормить его более глубокому иерархическому источнику данных, когда он достигнет 3-го уровня, эта строка haystack[i].children.data() возвращает пустые дочерние элементы (предполагается, что они не пустые). Почему 3-й уровень источника данных пуст? Несмотря на то, что Treeview отлично отображал все данные, содержащиеся внутри иерархического источника данных. Я что-то здесь упускаю?
Ответ №1:
Я должен вызвать load() для haystack перед рекурсией, чтобы дочерние элементы haystack были загружены.
function findTreeviewNodeById(haystack, needle) {
var uid = null;
for (var i = 0; i < haystack.length; i ) {
haystack[i].load();
if (haystack[i].id == needle) {
uid = haystack[i];
}
else if (haystack[i].hasChildren) {
uid = findTreeviewNodeById(haystack[i].children.data(), needle);
}
if (uid != null)
break;
}
return uid;
}