如何使用Knockout JS指定名称属性

19

我有一个使用knockoutjs / mvc3绑定的列表

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

发送这个到我的控制器操作,它是

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

以前,我能够通过在input中指定名称来使用Jquery绑定到我的List< T >。

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

但是我现在正在使用knockout,我不清楚这应该如何工作。有人可以指导我吗?

谢谢。

3个回答

52

如果你的电话号码是一个可观察的数组,你可以在模板或foreach中使用attr绑定来实现这一点。


You can do this using the attr binding in a template or foreach like this assuming your phone numbers are in an observable array.
<input data-bind='attr: { name: "Phones["+$index()+"].Name"}' />

我还假设您正在使用最新版本的knockout,这样您就可以使用$index。

这将使您能够对输入进行命名,以便它们可以与MVC模型绑定一起使用。


谢谢回复。看起来很不错。当我检查输入时,它与您这里的完全相同,没有更改$index。我从新克隆中获得了v2.1.0 - 这是正确的版本吗? - MikeW
是的,它在2.1.0版本中。我的答案中有几个错别字,我已经修改了。 - Joel Cunningham

1

您可以使用内置于Knockout的'uniqueName'。以下是文档链接: http://knockoutjs.com/documentation/uniqueName-binding.html

如果您需要自定义绑定(例如唯一ID生成),则可以使用自定义绑定: http://knockoutjs.com/documentation/custom-bindings.html

以下是有关uniqueName和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_"
};


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接