2012-06-22 15 views
6

¿hay alguna forma de ordenar automáticamente una matriz observable cuando se modifica una propiedad vinculada? Creo que en el siguiente ejemplo, mi vista se actualiza cuando agrego una nueva persona, pero ¿puedo obtener la vista para actualizar y aplicar mi función de clasificación si se cambia la edad de una persona?Ordenar automáticamente ko.observableArray como las propiedades vinculadas cambian

person = { 
    age: ko.observable(); 
} 

viewModel = { 

    people: ko.observableArray([]), 

    someSortFunction: function() { 
     this.people.sort(function(person1, person2) { 
      return person2.age() - person1.age(); 
     }); 
    } 
} 

<div data-bind="foreach: people"> 
    <span data-bind="text: age"/> 
</div> 

Respuesta

4

se puede suscribir un observable y actuar cada vez que los cambios observables:

person.age.subscribe(function (newValue) { 
    viewModel.someSortFunction(); 
}); 
+1

Nota: hay problemas con este enfoque que aquellos teniendo en cuenta que se quieren tener en cuenta. Primero: para asegurar que la matriz observable ordena continuamente, tendrá que suscribirse manualmente a la misma propiedad en cada elemento de la matriz. Segundo: las suscripciones permanecen a menos que las elimine manualmente en cada elemento a medida que lo elimina de la matriz observable. Esto crea la posibilidad de una pérdida de memoria. Utiliza esta técnica con mucho cuidado. – Randolpho

+1

@Randolpho :: bastante cierto ... lo que puede parecer obvio puede llevar a un error similar a 'RangeError no capturado: el tamaño máximo de la pila de llamadas excedido' en el que el 'subscribe' continúa ejecutándose por género ... y nunca se detiene – beauXjames

Cuestiones relacionadas