knockoutjs MVC 4 вычисленных значения
У меня есть следующая viewModel
var viewModel = new myViewModel([{
Name: "Name",
price: 32,
tax: 22,
}, {
Name: "Name",
price: 32,
tax: 22,
}]);
У меня есть привязка данных к
<tbody data-bind='foreach: personInfo'>
и ввод:
<td>
<input class='required' data-bind='value: Name'/>
</td>
<td>
<input class='required' data-bind='value: Price'/>
</td>
<td>
<input class='required' data-bind='value: Tax'/>
</td>
и я хочу получить расчетное значение для цены, а затем для налога, однако я не добился успеха.:(
self.totalSurcharge = ko.computed(function () {
var total = 0;
for (var i = 0; self.PersonInfo().length; i++)
total += self.PersonInfo[i].price;
return total;
});
любая идея?
ОБНОВИТЬ:
как то так: http://jsfiddle.net/hamsaya/9XNDH/1/
Спасибо
3 ответа
Решение
Я проверил приведенный ниже код, который работает нормально,
Измените ваш HTML, как показано ниже:
<tr>
<td> Total of price here</td>
<td data-bind="text:totalPrice"></td>
</tr>
Добавьте ниже Computed Observable в свой скрипт для расчета общей цены:
self.totalPrice = ko.computed({
read: function() {
var totalAmount = null;
for(var i=0 , j=self.gifts().length ; i < j ; i++ )
{
totalAmount =Number(totalAmount)+ Number(self.gifts()[i].price);
}
if(totalAmount == 0){
totalAmount = '0.00'
}
return totalAmount;
}
});
Достаточно интересно, они должны обновить сайт:
вот ответ.
self.totalSurcharge = ko.computed(function () {
var total = 0;
for (var i = 0; i < gifts.length; i++)
total =total+ gifts[i].price;
return total;
});
Согласно документации, вам нужно использовать паразиты для доступа к наблюдаемому массиву в KO-оболочке, прежде чем использовать индексатор для доступа к данным из него:
http://knockoutjs.com/documentation/observableArrays.html
Попробуйте заменить
self.PersonInfo[i].price
с
self.PersonInfo()[i].price