JavaScript knockoutjs,设置嵌套对象值不会更新Html?

时间:2015-12-13 07:53:51

标签: javascript html knockout.js

我使用的是淘汰赛3.3.0。假设我有一个模型如下:

knockout model

如您所见,有两个嵌套对象DeviceStatisticsProduct 起初它们没问题,工作正常并更新HTML 我将新值分配给这些对象,如下所示:

window.KoEntityModel.EntityModel.DeviceStatistics = ko.mapping.fromJS(newJsonModel);

没有任何问题可以,但是淘汰不会更新(更改)HTML
然而,Chrome控制台显示window.KoEntityModel.EntityModel.DeviceStatistics是可观察的:

knockout nested model

我该如何解决?

2 个答案:

答案 0 :(得分:1)

object转换为function,您需要执行以下操作

<强>视图模型:

var fromserver = {
  'device': {
    'one': 'onevalue'
  },
  'product': {
    'prod': 'prodone'
  },
  'name': 'supercool'
};

var ViewModel = function() {
  var self = this;
  self.device = ko.observable();
  self.prod = ko.observable();
  ko.mapping.fromJS(fromserver, {}, self); //this converts object into function & keeps the other prop's coming from server intact .
};
var vm = new ViewModel();
ko.applyBindings(vm);

工作样本小提琴 here 显示已修改的数据。

答案 1 :(得分:0)

我找到了解决方案,
我们必须使用以下代码更新knockoutJs视图模​​型:

ko.mapping.fromJS(newDataInJson, {}, knocoutJsViewModel);