2012-06-07 34 views
6

Recibo datos de un WCF y lo vinculo a una tabla. Me han ayudado en este foro para agregar algunos campos de cálculo y todo funciona a la perfección. Me gustaría agregar un total al pie de esta tabla. una versión simple de mi página se puede ver en http://jsfiddle.net/qeUHd/3/. Básicamente, me gustaría aprender a agregar un campo a mi ViewModel que es el resultado de la suma de Otro campo en mi muestra "Amount". Cualquier ayuda sería muy apreciada. http://jsfiddle.net/qeUHd/3/knockout compute sum

Respuesta

11

En su violín, está mapeando su conjunto de datos a self.model, por lo que self.model es observableArray. Como ese era el caso, solo necesitaba armar un computed value para obtener el total.

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; 
}); 

A continuación, sólo asegúrese de unirse a ella.

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

Estás haciendo las cosas un poco hacia atrás, pero supongo que es debido a la forma en que está recibiendo los datos, así que ocupado de ella y siguió adelante.

+0

Muchas gracias Empiezo a entender el nocaut lógico gracias al increíble equipo de expertos aquí. –

1

Mientras yo generalmente recomiendo y apoyo poniendo este tipo de campos calculados en el modelo de vista (ya que es generalmente donde pertenecen), hay momentos en los que está trabajando con los datos en los que es difícil añadir propiedades calculadas adicionales. Un ejemplo sería si está agrupando sus datos dentro de la vista. En ese caso, aún podría mostrar su total, pero mueva el cálculo a la vista:

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