Javascript 在视图模型之间访问计算值
我试图在一个页面上包含多个ViewModel,我不想将这些绑定到特定的页面ID,就像我知道您可以这样做一样,我希望能够在一个页面上多次使用每个模型,并将使用带有绑定的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
我正试图从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>