2013-12-18 6 views
-1

Я хочу ViewModel конкретизации завершить, а затем вызывать только loadUniqueUrl(viewModel); в следующем коде:Knockout.js: ждать конкретизации ViewModel, чтобы завершить

var viewModel = new ViewModel(data, subTopicId, chapterId, planId); 
ko.applyBindings(viewModel); 
loadUniqueUrl(viewModel); 

Я не могу модифицировать ViewModel.I не знать, как использовать обратный вызов в этом случае. Пожалуйста, помогите

+1

Ваш код exectutes строит линию, поэтому loadUniqueUrl будет вызываться, когда applyBidings завершен. Конечно, если у вас нет каких-либо аякс-вызовов в ViewModel. – alexmac

+0

не совсем @Alexander. Javascript - асинхронный. –

+1

вы должны использовать обратные вызовы –

ответ

-1

Для привязки обычно требуется очень мало времени, чтобы завершить ... в случае, когда вещи просто стреляют слишком быстро для вас, и вы не контролируете свой объект модель, оберните функцию, которую вы хотите выполнить, в простой setTimeout.

setTimeout(loadUniqueUrl(viewModel), 200) 
+1

Бит кувалдой подход. Если вы закончите быстрее, пользовательский интерфейс сидит в ожидании. Если загрузка занимает больше 200, вы начинаете загрузку частично инициализированного объекта, что может привести к возникновению всех проблем. –

+0

Спасибо за ваши конструктивные вводные и мудрые слова. По его словам, у него нет доступа к модели представления ... если это также подразумевает, что у него нет доступа к добавлению объектов ko.computed, тогда опция «deferEvaluation» недоступна. Хорошо, что один из нас был полезным. – beauXjames

+0

Я не предлагал неполного решения или получаю snarky, потому что кто-то указал на потенциальные проблемы с моим решением. Хорошо, что один из нас не принял это лично. –

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