在视图模型之间访问计算值

时间:2015-07-08 11:13:58

标签: javascript mvvm knockout.js

我正在尝试在一个页面上包含多个视图模型,我不想将这些与特定的页面ID绑定,就像我知道您能够做的那样,因为我希望能够使用每个模型在页面上不止一次,并将使用with绑定。

我试图从self.total VM1中的self.total中读取VM2VM1.x的值,但我收到错误消息:< / p>

  

无法为ko.computed写一个值,除非你指定了一个&#39;写&#39;选项。如果您想阅读当前值,请不要传递任何参数。

VM2读取标准var VM1 = function(parent) { var self = this; self.costa = 1000; self.costb = 500; self.total = ko.computed(function(){ return self.costa + self.costb; }); }; var VM2 = function(parent) { var self = this; self.total = ko.observable(parent.vm1.total); }; var MasterViewModel = function() { var self = this; self.vm1 = new VM1(self); self.vm2 = new VM2(self); }; window.masterViewModel = new MasterViewModel(); ko.applyBindings(window.masterViewModel); 变量似乎工作正常,但是当试图获取计算值时,淘汰赛只会抱怨。

JavaScript的:

<div data-bind="with: vm1">
  <p data-bind="text: total()"></p>
</div>
<div data-bind="with: vm2">
  <p data-bind="text: total()"></p>
</div>

HTML:

--NavBar--
----Parallax header -----
----UIView------
---Tableview-cells----

1 个答案:

答案 0 :(得分:0)

解决方案(也由@ haim770指出)是将total作为函数调用: self.total = ko.observable(parent.vm1.total());