2013-05-15 3 views
1

Я строю большую страницу с 10 различными формами на IT- каждой формы будет ее собственная модель, с помощью мастер-модели, потянув их вKnockout.js - Настройка привязок после загрузки модели с помощью Ajax

Во-первых. :

var masterPageModel = new PageViewModel(); 
ko.applyBindings(masterPageModel); 

Какие ссылки pageViewModel.js ::

// section-specific models 
this.selectedCoverage = new SelectedCoverage(); 
// continue with other sub-models... 

Какие ссылки selectedCoverage.js (и другие), как так:

this.tier_chosen = ko.observable("Individual + Family"); 
this.subscriber_dob = ko.observable('January 15, 1970'); 
this.subscriber_age = ko.observable(43); 

теперь я понимаю, что мне нужно предварительно заполнить данные в этих моделях. Итак, я пошел по этому пути:

var self = this; 
$.getJSON("./load.php",{},function(data){ 
    self.selectedCoverage = new SelectedCoverage(data); 
}); 

Теперь selectedCoverage.js выглядит как:

ko.mapping.fromJS(data, {}, this); 

Однако моя форма уже не работает, как предполагалось. В частности, «with: [model]» больше не видит соответствующую модель.

<div data-bind="with: selectedCoverage" > 

Страница больше не видит эту модель, как раньше, и, следовательно, вся секция скрыта.

Я также пытался ссылаться на него через $ корень, но по-прежнему не везло.

<div data-bind="with: $root.selectedCoverage" > 

Как я могу убедиться, что applyBindings знает, где находятся модели, приобретенные ajax?

Спасибо.


Update Я попытался сделать эти начальные значения наблюдаемых, но никакой радости:

// *** section-specific models 
self.selectedCoverage = ko.observable(); 
$.getJSON("./load.php",{},function(data){ 
    self.selectedCoverage = new SelectedCoverage(data); 
}); 

ответ

1

Вы не предоставили остальную часть кода, в основном, как и когда вы связываете Ваше мнение модель для DOM, но я думаю, что это может быть потому, что selectedCoveragecontactInformation кстати) не являются наблюдаемыми объектами. Что вы должны сделать, вероятно, это так:

self.selectedCoverage = ko.observable(); 
self.contactInformation = ko.observable(); 

$.getJSON("./load.php",{},function(data){ 
    self.selectedCoverage(new SelectedCoverage(data)); 
    self.contactInformation(new ContactInformation(data)); 
}); 
+0

Хм .. это все еще не делал этого. Обновлен мой пример выше .... – Scott

+0

это не self.selectedCoverage = новый SelectedCoverage (данные), но self.selectedCoverage (новый SelectedCoverage (данные)); – Jalayn

+0

Doh! Прости, я пропустил это. Спасибо, он отлично работает. – Scott

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