【问题标题】:Knockoutjs + ko.mapping.fromJS + computed field not calculate computedKnockoutjs + ko.mapping.fromJS + 计算字段不计算计算
【发布时间】:2012-10-11 12:13:09
【问题描述】:

我尝试这样做:

myData = {weight: 100, anotherWeight: 120.55}; // when my data is plain json - all work

$.when($.getJSON(url, {param}, function(data) {myData = data} ).   
 //when i got it from ajax - dosn't work
then(function(){
  var taskModel = function(data)
  {
    var self = this;
    ko.mapping.fromJS(data, {}, self);
    this.computedWeight = ko.computed(function () { return self.weight() + 
       ' ---- ' + 
       self.anotherWeight() + ' kg'; });
  }
  ko.applyBindings(new taskModel(myData));
});

<input type="text" data-bind="value: weight"/><br/>
<input type="text" data-bind="value: anotherWeight"/><br/>
<span data-bind="text: computedWeight"></span>

第一次 - 加载后 - computedWeight 计算正确。但是当我改变 weight 或 anotherWeight 字段时 - computedWeight 不会改变。
谢谢。

【问题讨论】:

  • 是否为服务器返回了正确的数据?成功回调中返回什么?请看看这个jsfiddle
  • 谢谢。在 jsfiddle - jsfiddle.net/EfRj/4 - 一切正常。但在我的情况下 - 未计算计算字段。我将尝试调查 ajax 响应。

标签: knockout.js computed-observable computed-values


【解决方案1】:

尝试ko.mapping.fromJSON() 而不是ko.mapping.fromJS()

【讨论】:

  • 谢谢大家。问题已解决。这是我的错误。我对重量和另一个重量使用自定义绑定。在这种情况下,简单的计算(...)不起作用。当我使用简单的 bndig <... data-bind="value: weight"> - 一切正常。
    抱歉提问。我的爱。
猜你喜欢
  • 2018-11-22
  • 2015-07-30
  • 1970-01-01
  • 2022-08-17
  • 2012-11-24
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多