2012-05-29 18 views
18

Ho una lista legata utilizzando knockoutjs/MVC3come specificare la proprietà nome utilizzando knockout js

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

di inviare questo per la mia azione di controllo che è

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

In precedenza sono stato in grado di legarsi alla mia < T> utilizzando jQuery specificando il nome sull'ingresso che sarebbe

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

Ma ora sto usando il knockout Non sono chiaro come dovrebbe funzionare. Qualcuno mi guida nella giusta direzione.

Ta

risposta

50

È possibile eseguire questa operazione utilizzando l'associazione in un modello o foreach come questo presupposto i numeri di telefono sono in un array osservabile attr.

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

Im anche supponendo che si stia utilizzando l'ultima versione di knockout in modo da poter utilizzare l'indice $.

Ciò consentirà di denominare gli input in modo che funzionino con il binding del modello MVC.

+0

Grazie per la risposta. Sembra fantastico .. quando guardo l'input è esattamente come lo hai tu qui .. nessun cambiamento in $ indice. Ho v2.1.0 dal clone fresco - è quella la versione giusta? – MikeW

+0

Sì, è in 2.1.0. Ci sono stati un paio di refusi nella mia risposta che ora ho risolto. –

+0

Awesome Joel, grazie mille :) – MikeW

1

È possibile utilizzare "uniqueName", costruire a eliminazione diretta. Ecco la documentazione: http://knockoutjs.com/documentation/uniqueName-binding.html

Se volete personalizzato vincolante (per esempio la generazione ID univoco) è possibile utilizzare personalizzato vincolante: http://knockoutjs.com/documentation/custom-bindings.html

Queste sono le risposte utili per unuqueName e UniqueID: Unique ids in knockout.js templates e Knockout JS "uniqueName" binding - Same name to two fields

mio implementazione per la generazione di ID univoco è:

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

Problemi correlati