Javascript 在另一个上下文中使用计算可观测的实例

Javascript 在另一个上下文中使用计算可观测的实例,javascript,knockout.js,Javascript,Knockout.js,我在网上搜索了一段时间,找到了一个使用knockout js computed observable功能将owner属性设置为根上下文以外的另一个上下文的示例 问题是,我试图访问根计算属性上的foreach当前上下文,以便在主vm上的一个属性的帮助下计算product.finalPrice属性,如下所示: var product = function(){ this.finalPrice = ko.observable(0); // setting its value on the main

我在网上搜索了一段时间,找到了一个使用knockout js computed observable功能将
owner
属性设置为根上下文以外的另一个上下文的示例

问题是,我试图访问根计算属性上的foreach当前上下文,以便在主vm上的一个属性的帮助下计算
product.finalPrice
属性,如下所示:

var product = function(){
  this.finalPrice = ko.observable(0); // setting its value on the main vm.
}; 

var mainVM = function(){
    this.taxRate = ko.observable(0.18); // tax property that is involoved on product price.
    this.CalculateFinalPrice = ko.computed({
    read:function(){....}, // reading value from current product context.
    write:function(value){....},
    owner: // I want to set the current foreach binding context here in order to change current product final price here.

   });
};
如果你有任何其他的想法来实现这个概念使用另一种技术,请列出它


提前谢谢

我认为你不必担心谁是主人。我也不认为你应该试图修改产品的价格,因为你不知道你是否已经这样做了。每次访问计算属性时,您都会一次又一次地应用税率

如果在
mainVM
中有一个可观察的
产品
数组,那么它可以保持原样。但是,如果每个产品都从
mainVM
知道税率,那么它就可以计算自己的最终价格。在本例中,我使用一个中介将税率从
mainVM
链接到每个
产品。然后,您可以随时访问任何产品的未征税价格或征税价格:

var taxMediator = new ko.subscribable();

var product = function(initialPrice) {
    var self = this;
    self.taxRate = ko.observable(0);

    taxMediator.subscribe(function(newValue) {
        self.taxRate(newValue);
    }, self, "updated");

    self.price = ko.observable(initialPrice);

    self.finalPrice = ko.computed(function() {
        return (+self.price() * (1 + +self.taxRate())).toFixed(2);
    });
}; 

var mainVM = function(){
    var self = this;

    self.taxRate = ko.observable(0);

    self.taxRate.subscribe(function(newValue) {
        taxMediator.notifySubscribers(newValue, "updated");
    });

    self.products = ko.observableArray((function() {
        return [
            new product(100),
            new product(300),
            new product(50)
        ];
    })());
};

ko.applyBindings(new mainVM());

你可以看到一个

谢谢@Cory的重播,我有一个产品列表(不是一个产品)在我的mainVM上定义为可观察数组,所以我需要一种方法来访问每个产品,并在mainVM taxRate属性的帮助下修改其价格,使用计算属性y你的soulotion非常适合我项目的另一个任务:),但问题是,我想访问self.CalculateFinalPrice属性上的一个产品实例,并获取其finalPrice*taxRate-我需要一些方法来访问CalculateFinalPrice方法上每个绑定上下文的html视图。@samih:如果每个产品都知道如何计算自己的最终价格呢?我又更新了我的答案。在上面的例子中通读我的思考过程。它现在运行良好,我从中学到了一个新东西:),非常感谢!