c# - 在两个ViewModels Knockoutjs之间共享ko.compute

标签 c# asp.net-mvc mvvm knockout.js

所以我有以下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之间共享。我有StartViewModelUploadViewModel,我使用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/

相关文章:

c# - 在哪里存储 Web 服务异常?

c# - 返回不同类型时是否建议使用多种方法?

asp.net-mvc - 注册 IExceptionLogger OWIN 与 WebApiConfig

wpf - 如何跟踪 DataTemplate 的所有实例或 DataTemplate 中的控件?

c# - 我们可以使用扩展方法来构建业务规则引擎吗?

c# - 将 Drawing.Color 转换为 HTML 颜色值

c# - MVC 模型绑定(bind) + 格式化

c# - 如何在浏览器中显示只有其内容的图像 (byte[])

c# - 访问WPF DLL的ViewModel

vb.net - MVVM 与设计时数据的绑定(bind)在设计时正常工作,但在运行时不能正常工作