2012-06-07 2 views
6

Я получаю данные из WCF и привязываю его к таблице. Мне помогли в этом форуме добавить некоторые поля вычислений, и все работает отлично. Я бы хотел добавить итог в нижнем колонтитуле этой таблицы. простую версию моей страницы можно было увидеть по адресу http://jsfiddle.net/qeUHd/3/. В основном я хотел бы узнать, как добавить поле в мою ViewModel, что является результатом суммы другого поля в моем примере «Сумма». Любая помощь будет принята с благодарностью.нокаут вычислительная сумма

ответ

11

В вашей скрипке вы настраиваете свой набор данных на self.model, поэтому self.model - это observableArray. Так как это было так, мне просто нужно было собрать computed value, чтобы получить ваше общее количество.

http://jsfiddle.net/qeUHd/5/

self.total = ko.computed(function(){ 
    var total = 0; 
    for(var p = 0; p < self.model().length; ++p) 
    { 
     total += self.model()[p].Amount(); 
    } 
    return total; 
}); 

Тогда просто убедитесь, что связываться с ним.

<td data-bind="text: total"> 

Вы делаете вещи немного назад, но я предполагаю, что это связано с тем, как вы получаете ваши данные, поэтому я имел дело с ним и пошел дальше.

+0

Спасибо большое. Я начинаю понимать нокаут логично благодаря удивительной команде экспертов здесь. –

1

В то время как я обычно рекомендую и поддерживаю перенос этих видов вычисленных полей в модель представления (как это обычно бывает там, где они принадлежат), бывают случаи, когда вы работаете с данными, где сложно добавить дополнительные вычисленные свойства. Например, если вы группируете свои данные в представлении. В этом случае вы все равно можете отобразить общее количество, но переместите расчёт на вид:

<td data-bind="text: $data.reduce(function(x,y) { return x + y.Amount(); }, 0)"></td> 

 Смежные вопросы

  • Нет связанных вопросов^_^