2012-05-10 17 views
19

pregunta similares como: Select element's initial valueKnockoutJS Seleccionar opciones y escoge el valor

estoy teniendo un ajuste del valor inicial del elemento de selección de tema. Básicamente, tengo una lista de datos semilla provenientes del servidor para rellenar la lista desplegable, y quiero que el valor seleccionado represente lo que se debe seleccionar de la entidad.

Como el valor seleccionado del modelo de datos no es igual a la referencia del objeto en los datos de inicialización, no se selecciona nada.

En este momento, estoy recorriendo cada entidad, encontrando el valor seleccionado correcto, estableciendo eso igual al equivalente de los datos semilla, luego Knockout sabe cómo conectarlo.

¿Existe una solución más elegante que esta? Jugueteé un ejemplo simplificado con más detalles ... http://jsfiddle.net/hbrYM/14/

Respuesta

34

Como adivinó correctamente que la referencia de Valor seleccionado no coincide, KO no selecciona ese elemento. La forma de hacer que esto funcione es no guardar el objeto complejo en el valor seleccionado y, en su lugar, seleccionar la ID, ya que una igualdad de tipo primitivo puede tener éxito y se selecciona el valor correcto.

http://jsfiddle.net/VLTFB/3/

Usted tendrá que utilizar la opción optionsValue sobre las opciones de enlace (si eso tiene sentido :)

<select data-bind="options: seedData, 
        optionsText: 'firstName', 
        optionsValue: 'ID', 
        value: data.selectedValue"> 

EDITAR

como se discute puede volver a seleccionar el correcto artículo con un calculado (no probado).

vm.currentlySelected = ko.computed(function() { 
    for (var i = 0; i < this.seedData().length; i += 1) { 
     var data = this.seedData()[i]; 
     if (data.ID === this.selectedValue()) { 
      return data; 
     } 
    } 
    return null; 
}, vm); 

Espero que esto ayude.

+0

Gracias por responder, tiene sentido. Actualmente devuelvo el objeto (no solo el ID) que luego se deserializa y persiste. Realmente esperaba que hubiera una forma de "instruir" a KO sobre cómo configurar esto porque tengo tantas selecciones diferentes en esta interfaz de usuario en particular ... – aswallows

+1

Todavía puede enviar el objeto de regreso con bastante facilidad solo cuando los datos de selección del servidor entra, simplemente envíe la identificación. Cuando necesite enviar un nuevo respaldo seleccionado, simplemente escriba un cálculo que recupere el objeto seleccionado actualmente (vea editar). De hecho, es más fácil hacerlo de esta manera, ya tienes los datos iniciales, ¿por qué molestarse en enviar toda esa información extra otra vez? – madcapnmckay

+0

¡Gracias por los comentarios! Voy a echar un vistazo a usar ese enfoque. – aswallows

Cuestiones relacionadas