Как обновить содержимое узла в Ext.tree.treePanel? - PullRequest
6 голосов
/ 10 марта 2010

У меня есть Ext TreePanel, к которому я пытаюсь добавить пагинацию на стороне сервера. Мы используем Ext 2.2.0.

У нас есть настроенное дерево, которое имеет только два уровня. Мы перечисляем 25 элементов под самим деревом (корень?), Но у каждого узла элемента может быть неограниченное количество дочерних элементов. Я предполагаю, что это "лист". Узлы элементов используют пользовательский uiProvider, как и все дочерние элементы.

Я добавил несколько изображений для предыдущей / следующей страницы в itemNodeUI и добавил обработчики, которые обновляют атрибуты узла элемента с помощью pageNumber. Файл DataUrl php захватывает эти атрибуты и в основном добавляет LIMIT к запросу sql.

Все работает должным образом, за исключением того, что при нажатии следующих / предыдущих изображений узел элемента разрушается. Если вы развернете узел, все будет так, как должно быть, но мне нужно, чтобы узел оставался расширенным, или чтобы он автоматически расширялся после загрузки. Я пытался использовать expand(), fireEvent('expand'), expandChildNodes, все девять ярдов. Ничего.


Вот функция, которая вызывается при нажатии на кнопку «Предыдущая страница»:

    onPaginationPrevButtonClick: function(e,t) {
        var parentEl = Ext.get(t).findParentNode('.x-tree-node-ct', 10, false).previousSibling;
        var treeNodeId = parentEl.getAttribute('ext:tree-node-id');
        var treeNode = this.tree.getNodeById(treeNodeId);
        var currentPage = parseInt(treeNode.attributes.pageNumber);

        if (currentPage > 0) {
            treeNode.attributes.pageNumber = currentPage - 1;
        }

        treeNode.getLoader().load(treeNode);
    }

1020 *
* Другая проблема, с которой я столкнулся, заключается в том, что itemNodeUI, который расширяет TreeNodeUI, не обновляется при вызове вышеупомянутой функции. Таким образом, текст, показывающий, сколько результатов отображается, не меняется с первой страницы. Есть ли способ обновить этот узел и развернуть его без перезагрузки всего дерева?


Если есть лучший или более простой способ, которым я должен это делать, я ценю любой ваш вклад. Я Ext.NEWB, так что почти все, что я делаю, это «хак». ;)


Edit:

Мне почти стыдно это признавать, но я полностью смог решить проблему свертывания, используя treeNode.reload() вместо повторного load() самого загрузчика. Вздох ...

treeNode.getLoader().load(treeNode);

должно было быть:

treeNode.reload();


Однако мне все еще нужно выяснить, как обновить сам узел, чтобы текст, показывающий результаты, и кнопки «предыдущий / следующий» отображались правильно. Я пытался использовать:

treeNode.parentNode.reload();

... но все, что делает, это освежает все дерево. Я просто хочу обновить сам itemNode. Есть мысли?


Заранее большое спасибо!

1 Ответ

0 голосов
/ 11 марта 2010

Что ж, я почти назначил каждому элементу HTML уникальный идентификатор и использую Ext.get для обновления стилей CSS и innerHTML. Это довольно уродливая хакерская работа, но с этим придется смириться.

Надеюсь, кто-то еще может что-то из этого извлечь. Желаем удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...