Knockout.js - 通过Ajax加载模型后配置绑定

时间:2013-05-15 16:58:11

标签: knockout.js knockout-2.0 knockout-mapping-plugin

我正在构建一个包含10种不同形式的大页面 - 每个表单都是它自己的模型,主模型将它们全部拉入。

首先:

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" >

该页面不再像之前那样看到此模型,因此整个部分都被隐藏了。

我也尝试通过$ root引用它,但仍然没有运气。

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

如何确保appliedBindings知道ajax获取模型的位置?

感谢。


更新 我确实尝试使这些初始值可观察,但没有快乐:

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

1 个答案:

答案 0 :(得分:1)

您没有提供其余的代码,主要是将视图模型绑定到DOM的方式和时间,但我认为可能是因为selectedCoverage(顺便提一下contactInformation)不可观察的物体。你应该做的可能就是:

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

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