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

Я пытаюсь найти элемент в иерархическом источнике данных кендо. Это необходимо, чтобы получить 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 отлично отображал все данные, содержащиеся в иерархическом источнике данных. Я что-то упустил здесь?


person strike_noir    schedule 20.06.2014    source источник


Ответы (1)


Я должен вызвать load() для стога сена, прежде чем я рекурсивно, чтобы дети стога сена были загружены.

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;
}
person strike_noir    schedule 08.07.2014