Поиск внутри иерархического источника данных Kendo

#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;
}