2012-03-01 11 views
9

Por favor, eche un vistazo a este ejemplo. http://jsfiddle.net/LdeWK/2/Knockout JS - Cómo enlazar correctamente un array observable

Quiero saber cómo enlazar valores de una matriz observable. Sé que el problema en el ejemplo anterior, es esta línea

<p>Editing Fruit: <input data-bind="value: $data" /></p> 

$ datos es el valor real, no la función observable que normalmente se unen. Parece que debería ser un proceso bastante directo, pero no puedo entenderlo.

En otros casos he utilizado matrices observables y tenía un objeto observable como cada elemento de la matriz observable. Quería saber cómo hacer que funcione con una matriz observable.

Gracias

Respuesta

17

Si va a enlazar de lectura/escritura a los elementos de un array o un observableArray, entonces tendrán que ser una propiedad de un objeto. De lo contrario, $data será el observable desenvuelto y no hay forma de que KO escriba en el observable real.

Usted tendría que hacer algo como:

var ViewModel = function(myFruit) { 
    var observableFruit = ko.utils.arrayMap(myFruit, function(fruit) { 
     return { name: ko.observable(fruit) }; 
    }); 
    this.fruit = ko.observableArray(observableFruit); 
}; 


ko.applyBindings(new ViewModel(["Apple", "banana", "orange"])); 

Aquí está una muestra: http://jsfiddle.net/rniemeyer/LdeWK/3/

Los frutos individuales no necesariamente tienen que ser observables, a menos que necesite la interfaz de usuario para reaccionar a los valores cambiando (su muestra no necesita reaccionar, ya que está mostrando una lista de solo lectura de las frutas).

+0

Grandes, gracias por aclarar que para mí – Sam

+1

Un seguimiento - ¿Cuál es la forma correcta de mostrar la longitud de un observableArray? tomando tu violín como punto de partida http://jsfiddle.net/wWDvW/ – BuddyJoe

+1

Tienes que llegar al arreglo subyacente como 'fruit(). length' –

0

aquí es mi truco en torno a:

<!-- ko foreach: list().map(observable => ({ value: observable })) --> 
    <input type="text" data-bind="value: value"> 
<!-- /ko --> 
Cuestiones relacionadas