#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. Но другой не может быть выполнен, пока этот не будет завершен