Вызов ajax-загрузчика панели дерева Extjs

#javascript #ajax #extjs

#javascript #ajax #extjs

Вопрос:

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

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

 // abort the previous call. Works, but then cant reload
thisTree.loader.abort(); 

// This works without the abort
thisTree.loader.baseParams.quicksearch_string = val;
thisTree.root.reload();.
  

Надеюсь, я упускаю что-то фундаментальное, но, похоже, не могу в этом разобраться…

Ответ №1:

 abort : function(){
    if(this.isLoading()){
        Ext.Ajax.abort(this.transId);
    }
},
  

Похоже, что он вызывает abort с конкретным идентификатором транзакции запроса, поэтому, на мой взгляд, не похоже, что здесь есть какие-либо асинхронные проблемы. Однако вы можете проверить это, поместив предупреждение между вызовами abort и reload, чтобы убедиться, что прерывание полностью завершится до того, как функция reload создаст новый идентификатор транзакции.

Я, однако, немного удивлен, что:

 thisTree.root.reload();
  

работает без прерывания. К какому типу узлов относится ваш корневой узел? Внешнее дерево.AsyncTreeNode? Более распространенный метод, который я вижу, это:

 tree.getLoader().load(tree.root);
  

Насколько я вижу, узлы не всегда имеют метод перезагрузки.

Однако требуется дополнительная информация. Что происходит при прерывании и вызове reload? Firebug не показывает никаких ajax-запросов?

Комментарии:

1. Спасибо за ответ. Я попробую ваш метод перезагрузки. И да, узел является AsyncTreeNode. Firebug показывает вызовы. Без прерывания, при перезагрузке вызывается вызов ajax. Но другой не может быть выполнен, пока этот не будет завершен