2013-05-23 3 views
0

У меня есть две функции: одна для расширения древовидного представления (т. Е. ExpandAll()), а вторая для удаления определенного типа элементов из этого древовидного представления (то есть RemoveAbElements()).Явный вызов call javascript

Метод ExpandAll() проверяет наличие дочерних узлов под выбранным узлом. Если нет, то он извлекает дочерние элементы посредством ajax-вызова. Так что теперь я называю эти методы следующим образом:

function(){ 
    ExpandAll(); 

    RemoveAbElements(); 
} 

Теперь моя проблема здесь есть, есть обратный вызов в методе ExpandAll() и вызывается для каждого дочернего узла расширенного (который, как ожидается). Теперь здесь обратный вызов вызывается даже после выполнения метода RemoveAbElements(). Я хочу выполнить метод ExpandAll() и все его обратные вызовы перед выполнением RemoveAbElements(). Я пробовал много вещей для этого, но никто не работал. пожалуйста помоги.

+0

Похоже, вы слишком усложнили свой дизайн для меня. Для меня это похоже на то, что ваша проблема - это хотя бы одно из ваших дизайнерских решений: lazy-load the tree view (не делайте этого, если ваши данные не огромны), асинхронная ленивая загрузка (если вы хотите, чтобы она была асинхронной, тогда вам нужно поместить свою пост-обработку в обработчик события onreadystatechange) или запросить слишком много данных, для которых данные должны быть отфильтрованы из ответа после его получения (получить сервер для фильтрации данных, если он не собирается требуется). –

ответ

0

Если я правильно вас понял, вы должны добавить слушатель EXpandAll(), и когда он закончил RemoveAbElements всех звонков()

Я хотел бы посмотреть на jquerys пользовательского события запуска:

http://api.jquery.com/trigger/

// Listen for finish 
$('#tree').on('customFinishedEvent', function(event) { 
    alert('finished'); 
}); 

// On finished loading and expanding 
$("#tree").trigger('customFinishedEvent'); 
1

Там может быть много способов, которыми вы могли бы приблизиться.

Одним из способов может быть, проходя RemoveAbElements себя ExpandAll.

Таким образом, вы могли бы передать его в качестве

ExpandAll(RemoveAbElements); 

или, если вы не хотите позвонить RemoveElements, как:

ExpandAll(); 

И ExpandAll может быть изменен, чтобы принять функцию обратного вызова:

ExpandAll(callbackFunc) { 

    //... Do Work Here 

    if(callbackFunc) callbackFunc(); 
} 

Или используйте triggerhandler & on если есть объект jquery, как предложено slinky2000.

+0

Спасибо loxxy за ваш ответ, но ответный вызов ExpandAll() будет вызываться несколько раз. и я хотел вызвать RemoveAbElements() только один раз. Будет ли это работать так? – Mayur

+0

вы можете оставить этот аргумент 'null', для случаев, когда вы не хотите вызывать RemoveElements. Я обновил свой пример ... – loxxy

Смежные вопросы