2012-05-29 44 views
18

我使用knockoutjs/MVC3如何使用指定的name屬性淘汰賽JS

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

送這個給我的控制作用,這是

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

以前我能夠綁定綁定列表到我的清單< T>使用Jquery通過指定輸入名稱將是

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

但我現在即時通過淘汰賽我不清楚這應該如何工作。任何人都會把我引向正確的方向。

Ta

回答

50

您可以在此使用attr在模板或的foreach這樣假設你的電話號碼是可觀察到的陣列結合做。

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

我還假設你正在使用最新版本的淘汰賽,所以你可以使用$索引。

這將允許您命名輸入,以便它們與MVC模型綁定一起工作。

+0

感謝您的回覆。這看起來不錯..當我檢查輸入,正如你在這裏..沒有改變到美元指數。我從新鮮克隆v2.1.0 - 是正確的版本? – MikeW

+0

是它在2.1.0。在我現在修復的答案中有幾個拼寫錯誤。 –

+0

真棒喬爾,謝謝一堆:) – MikeW

1

你可以使用'uniqueName',建立在淘汰賽。下面是文檔: http://knockoutjs.com/documentation/uniqueName-binding.html

如果你想自定義綁定(例如唯一ID生成),你可以使用自定義綁定: http://knockoutjs.com/documentation/custom-bindings.html

這些是unuqueName和UNIQUEID有用的答案: Unique ids in knockout.js templatesKnockout JS "uniqueName" binding - Same name to two fields

我的獨特ID生成的實現是:

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