Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在视图模型之间访问计算值_Javascript_Mvvm_Knockout.js - Fatal编程技术网

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

Javascript 在视图模型之间访问计算值,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我试图在一个页面上包含多个ViewModel,我不想将这些绑定到特定的页面ID,就像我知道您可以这样做一样,我希望能够在一个页面上多次使用每个模型,并将使用带有绑定的 我正试图从VM2中的self.total读取VM1中的self.total的值,但我得到一个错误: 除非指定“写入”选项,否则无法将值写入ko.computed。如果要读取当前值,请不要传递任何参数 从VM2中读取标准VM1.x变量似乎工作正常,但敲除只会在尝试获取计算值时发出抱怨 JavaScript: var VM1 = fu

我试图在一个页面上包含多个ViewModel,我不想将这些绑定到特定的页面ID,就像我知道您可以这样做一样,我希望能够在一个页面上多次使用每个模型,并将使用带有绑定的

我正试图从
VM2
中的
self.total
读取
VM1
中的
self.total
的值,但我得到一个错误:

除非指定“写入”选项,否则无法将值写入ko.computed。如果要读取当前值,请不要传递任何参数

VM2
中读取标准
VM1.x
变量似乎工作正常,但敲除只会在尝试获取计算值时发出抱怨

JavaScript:

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);
HTML:


解决方案(如@haim770所述)是将total作为一个函数调用: self.total=ko.observable(parent.vm1.total())

解决方案(如@haim770所述)是将total作为一个函数调用:
self.total=ko.observable(parent.vm1.total())

您好@haim770谢谢您的回复,但出于某种原因,这似乎也不起作用。与我之前看到的错误消息相同。感谢您只需要
self.total=parent.vm1.total。当显示值时,需要调用它。例如:
data bind=“text:total()”
。虽然我希望能够从JS中的viewmodel访问此值,以便可以使用它连接值,例如:VM2.total=VM1.total()+VM3.total+VM4.total()。您没有提供任何html。你是如何绑定这个计算出的总价值的?嗨@PhilipBijker我已经用我的标记示例更新了上面的问题。谢谢。您好@haim770谢谢您的回复,但由于某种原因,这似乎也不起作用。与我之前看到的错误消息相同。感谢您只需要
self.total=parent.vm1.total。当显示值时,需要调用它。例如:
data bind=“text:total()”
。虽然我希望能够从JS中的viewmodel访问此值,以便可以使用它连接值,例如:VM2.total=VM1.total()+VM3.total+VM4.total()。您没有提供任何html。你是如何绑定这个计算出的总价值的?嗨@PhilipBijker我已经用我的标记示例更新了上面的问题。谢谢
<div data-bind="with: vm1">
  <p data-bind="text: total()"></p>
</div>
<div data-bind="with: vm2">
  <p data-bind="text: total()"></p>
</div>