所以我有以下ko.computed:
self.grandTotal = ko.computed(function () {
var total = self.bookBasePrice();
if (self.TornEdge() == true)
total += self.TornEdgeCost();
if (self.LogoStamping() == true)
total += self.LogoCost();
return total;
});
我想在两个ViewModel之间共享。我有
StartViewModel
和UploadViewModel
,我使用ko.mapping
动态创建可观察对象,这两个ViewModel使用完全相同的grandTotal
计算的可观察对象,尽管它们在其他方面有所不同。有没有办法做到这一点,我查看了ko.extenders,但这并不是我想要的。
最佳答案
看起来像使用继承是一个不错的选择,如下所示:
function BaseVM(){
var self = this;
self.someValue = ko.observable();
self.grandTotal = ko.computed(function () {
return self.someValue()+1;
});
}
function Vm1(initValue){
var self = this;
self.someValue(initValue);
}
Vm1.prototype = new BaseVM();
Vm1.prototype.constructor=Vm1;
function Vm2(){
var self = this;
self.someValue(13);
}
Vm2.prototype = new BaseVM();
Vm2.prototype.constructor=Vm2;
ko.applyBindings(new Vm1(4),document.getElementById("View1"));
ko.applyBindings(new Vm2(),document.getElementById("View2"));
在这里摆弄:
http://jsfiddle.net/luisvsilva/freLc1nd/3/
通常,当我在Javascript中使用继承时,我会使用令人敬畏的John Resig编写的精彩片段:
http://ejohn.org/blog/simple-javascript-inheritance/
关于c# - 在两个ViewModels Knockoutjs之间共享ko.compute,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30314888/