2012-05-29 24 views
18

Tengo una lista unida usando knockoutjs/MVC3cómo especificar la propiedad de nombre utilizando nocaut js

<div data-bind="foreach: phones"> 
    <input data-bind='value: number' /> 
</div> 

a enviar esto a mi acción del controlador, que es

[HttpPost] 
public ActionResult Index([Deserialize] WizardModel wizard, IStepViewModel step) 
{ 
} 

Anteriormente fue capaz de unirse a mi selección < T> usando jQuery especificando el nombre de la entrada que habría

<input name="Phones[0].Name" 
       Phones[1].Number etc.. 

Pero ahora estoy usando knockout No tengo claro cómo debería funcionar esto. Alguien me guíe en la dirección correcta.

Ta

Respuesta

50

Usted puede hacer esto mediante la unión de una plantilla o foreach como esto asumiendo sus números de teléfono están en una matriz observable attr.

<input data-bind='attr: { name: "Phones["+$index()+"].Name"}' /> 

También estoy asumiendo que usted está utilizando la última versión del golpe de gracia para que pueda utilizar el índice $.

Esto le permitirá nombrar las entradas para que funcionen con el enlace de modelo MVC.

+0

Gracias por la respuesta. Eso se ve muy bien ... cuando inspeccione la entrada es exactamente como la que tiene aquí ... no hay cambio en $ index. Tengo v2.1.0 de clon nuevo. ¿Es esa la versión correcta? – MikeW

+0

Sí está en 2.1.0. Hubo un par de errores tipográficos en mi respuesta que ahora he solucionado. –

+0

Awesome Joel, gracias un montón :) – MikeW

1

Puede usar 'uniqueName', construir en knockout. Aquí está la documentación: http://knockoutjs.com/documentation/uniqueName-binding.html

Si desea enlace personalizado (por ejemplo, la generación de identificador único) se puede utilizar el enlace de encargo: http://knockoutjs.com/documentation/custom-bindings.html

Estas son respuestas útil para unuqueName y uniqueId: Unique ids in knockout.js templates y Knockout JS "uniqueName" binding - Same name to two fields

Mi aplicación para la generación de identificador único es:

ko.bindingHandlers.uniqueId = { 
    init: function (element, valueAccessor) { 
     if (valueAccessor()) { 
      element.id = ko.bindingHandlers.uniqueId.prefix + (++ko.bindingHandlers.uniqueId.counter); 
     } 
    }, 
    counter: 0, 
    prefix: "unique_id_" 
}; 

Cuestiones relacionadas