我在视图模型中有一个可观察的变量'rate'和可观察的数组'seat'。数组的元素'priceOtherCurrency'中有一个计算变量,它需要父体的'rate'。如何访问父变量或将参数传递给计算函数?
以下是一个例子:
在这个例子中,我在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',隐藏字段等,我怎么能这样做呢?
答案 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参数。