如何从计算绑定访问父级

时间:2013-10-29 06:04:43

标签: knockout.js

我在视图模型中有一个可观察的变量'rate'和可观察的数组'seat'。数组的元素'priceOtherCurrency'中有一个计算变量,它需要父体的'rate'。如何访问父变量或将参数传递给计算函数?

以下是一个例子:

Fiddle Sample

在这个例子中,我在SeatReservation对象中添加了'rate':

function SeatReservation(name, initialMeal, rate) {
    var self = this;
    self.name = name;
    self.meal = ko.observable(initialMeal);
    self.rate = rate;
    self.priceOtherCurrency = ko.computed(function() {
        return self.meal().price * self.rate();    
    }, this);
}

但它重复了。如果没有SeatReservation中的'rate',隐藏字段等,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:2)

您可以访问父绑定上下文,并在视图中执行此操作:

<td data-bind="text: $parent.rate() * priceOtherCurrency()"></td>

,这在viewmodel中:

self.priceOtherCurrency = ko.computed(function() {
    return self.meal().price; 
}, this);

更新小提琴:http://jsfiddle.net/LkqTU/12156/

但是,这会将业务逻辑放在视图中,这不是一件好事。 viewmodel层次结构应该模仿数据结构的概念层次结构。如果当前的视图模型是数据结构的正确设计,我会说它们保持不变,即使你必须在构造函数中传递rate参数。