Knockout Observable在给定新值时不会更新

时间:2015-07-01 19:31:20

标签: javascript ajax knockout.js

这似乎是使用淘汰赛最基本的部分,我不确定它为什么不起作用,但出于某种原因,我的5个淘汰赛观察中有2个正在坚持他们的新价值。

在模型的设置中:

self.CProviderIdentifier = ko.observable();
self.ReferringProviderIdentifier = ko.observable();
self.BillableCareProviderIdentifier = ko.observable();
self.ServiceLocationIdentifier = ko.observable();
self.PracticeLocationIdentifier = ko.observable();

在一个AJAX调用内部,它返回一个JSON对象内的一些项目,我提取相关的信息片段,并将它们放入正确的observable中:

visitModel.CProviderIdentifier(data.CareProviderIdentifier);
visitModel.ReferringProviderIdentifier((data.ReferringProviderIdentifier == null ||
  data.ReferringProviderIdentifier == "undefined") ? 0 : data.ReferringProviderIdentifier);
visitModel.BillableCareProviderIdentifier(data.BillableCareProviderIdentifier);
visitModel.PracticeLocationIdentifier(data.PracticeLocationIdentifier);
visitModel.ServiceLocationIdentifier(data.ServiceLocationIdentifier);

现在,如果它们都不起作用,它会(某些)有意义,但只有CProviderIdentifier和ReferProviderIdentifier没有数据。我在设置属性之前就在断点处检查了数据,并且数据中的值是1003和0,但是两个可观察的未定义是上面的代码块。

我正在努力为此工作:https://jsfiddle.net/bz3mq6z9/

2 个答案:

答案 0 :(得分:-1)

赋值在loadData函数中完成。在它里面,Javascript不知道访问模型是什么。该变量不存在,并且在setter中没有任何用途。

使用self而不是visitModel。那样淘汰赛知道他正在为视图模型分配值

问候

答案 1 :(得分:-1)

您的代码中存在一些错误:

  1. 应使用以下命令将viewmode与DOM绑定:

    ko.applyBindings(visitModel);

  2. ko.observable是一个函数,所以你应该在结合字符串之前调用它。

    <span data-bind="text: CProviderIdentifier() + 'cp'"></span>

  3. visitModel函数中使用LoadData并不是一个好主意,您可以使用self来保留引用。

  4. 请参阅此演示:http://jsfiddle.net/bz3mq6z9/6/