【问题标题】:Knockout Observable not updating when given a new value给定新值时,Knockout Observable 不更新
【发布时间】:2015-07-03 16:29:13
【问题描述】:

这似乎是使用淘汰赛最基本的部分,我不确定为什么它不起作用,但出于某种原因,我的 5 个淘汰赛 observables 中有 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 和 ReferringProviderIdentifier 没有数据。我在设置属性之前检查了断点中的数据,数据中的值是 1003 和 0,但是上面的代码块是未定义的两个 observables。

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

【问题讨论】:

  • 您确定您的data 对象中没有错字吗?你可以试试:var temp = data.CareProviderIdentifier; visitModel.CProviderIdentifier(temp); 并在调试器中观察temp 吗?
  • 这就是我发现 CareProvider 的数据是 1003,而我的测试项目的 ReferringProvider 数据是 0。
  • 如果你输入一个静态值会发生什么,比如:visitModel.CProviderIdentifier(12345);?
  • 由于某种原因,它仍然读作未定义。我只是在设置原始问题中的值之前尝试了这两种方法,或者像您在评论中所做的那样。之后两次都未定义。
  • 创建一个MCVE

标签: javascript ajax knockout.js


【解决方案1】:

在 loadData 函数中进行分配。在其中,Javascript 不知道什么是 visitModel。该变量不存在,并且在 setter 中没有任何用途。

使用 self 而不是 visitModel。这样,knockout 就知道他正在为视图模型赋值

问候

【讨论】:

    【解决方案2】:

    您的代码中有一些错误:

    1. 应该使用以下方式将视图模式与 DOM 绑定:

      ko.applyBindings(visitModel);

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

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

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

    查看此演示:http://jsfiddle.net/bz3mq6z9/6/

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 2017-09-02
      • 2021-07-15
      • 1970-01-01
      相关资源
      最近更新 更多