Как связать функцию обратного вызова с полным событием перезагрузки jstree? - PullRequest
6 голосов
/ 23 июня 2011

У меня есть кнопка, которая перезагружает (повторно отправляет AJAX-запрос) jsTree один раз, когда нажимается.

Вот пример кода конфигурации, который у меня есть:

treeContainer.bind("loaded.jstree", function () {
    alert("the tree is loaded");
}).jstree(config);

Проблема, с которой я сталкиваюсьчто у меня не отображается предупреждение (обернутое в функцию обратного вызова) после нажатия кнопки «перезагрузить» 2-й, 3-й и т. д. раз.Я использую неправильное событие состояния jstree?

Подводя итог, я хочу, чтобы функция обратного вызова jsTree выполнялась каждый раз, когда я нажимаю кнопку "перезагрузить".

В настоящее время я использую jsTree 1.0-rc1 (rev. 191) .

Ответы [ 3 ]

5 голосов
/ 27 декабря 2013

Уничтожение дерева перед созданием нового тоже работает.

treeContainer.jstree("destroy");
treeContainer.bind("loaded.jstree", function () {
    alert("the tree is loaded");
}).jstree(config);
1 голос
/ 20 октября 2012

добавить это в ядро:

        reopen : function () {
            var _this = this;
            if(this.data.core.to_open.length) {
                $.each(this.data.core.to_open, function (i, val) {
                    _this.open_node(val, false, true); 
                });
            }
            this.__callback({});
            this.reopened();
        },

обратите внимание, что только this.reopened добавляется в уже существующий метод reopen. Теперь создайте повторно открытый метод:

        reopened : function () {
            this.__callback();
        },

теперь свяжите новый метод reopened с вашим селектором дерева

}).bind("reopened.jstree", function (e,data) {
        alert("i am refreshed...");
    });

будьте осторожны, потому что это оповещение также будет вызываться, когда дерево будет загружено. В любом случае это лучше, так как теперь у вас есть возможность получить обратный вызов при обновлении дерева!

надеюсь, это поможет вам всем!

0 голосов
/ 23 июня 2011

Из jstree документации :

.loaded ()

фиктивная функция, цель которой только для запуска загруженного события. это событие срабатывает один раз после корневые узлы дерева загружены, но перед любым узлом, установленным в initial_open открыты.

Так что вы можете вызывать этот метод из обратного вызова вашего вызова ajax. Примерно так:

$.ajax({
  url: "yourscript-url",
  success: function(){
    $('selector-for-jstree-container').jstree('loaded');
  }
});

См. Также раздел " Взаимодействие с деревом * " на той же странице документации jstree.

...