在模板中敲除js字符串格式索引

时间:2012-09-26 05:11:06

标签: asp.net-mvc knockout.js

我目前正在研究一些Knockout js模板的东西。我的要求是我需要使用字符串和行的索引值的组合来设置字段(输入)的名称。 例如“xxx3”。

我尝试了两种选择。

'xxx' + ko.utils.arrayIndexOf(viewModel.mycollection, $data)

'xxx' + $index

第一个选项总是给我的索引值'-1',第二个选项不起作用 因为我似乎只能在没有任何字符串连接的情况下使用$ index值。

如果我可以在knockout中将字符串值连接到$ index值,有人可以告诉我,这样我就可以将其设置为输入字段的name属性。

我想要的最终结果应该是这样的。

<input class="text-box single-line" data-val="true" 
   data-val-required="The XXX field is required." id="XXX" type="text" name="XXX3">

以下是我的模板的样子。

<table id ="editorRows" class="table">
        <tbody data-bind='template: {name: "rowTemplate", foreach: Rules }'></tbody>
    </table>

    <script id="rowTemplate" type="text/html">
        <tr data-bind="attr: { id: RuleKey }">
            <td>
                <div class="editor-field">
                    <input class="text-box single-line" data-val="true" data-val-required="The Name field is required." id="Name" type="text" data-bind="value: Name, attr: {name : 'Rules[' + $index + '].Name'}" />
                    <span class="field-validation-valid" data-bind="attr : { 'data-valmsg-for': 'Rules[' + $index + '].Name'}" data-valmsg-replace="true"></span>
                </div>
            </td>
</tr>
</script>

1 个答案:

答案 0 :(得分:3)

$index是一个可观察的,所以你需要调用它来检索值。因此,假设您尝试将属性的值设置为字面Rule[0].Name,则执行此操作:

<input class="text-box single-line" data-val="true" data-val-required="The Name field is required." id="Name" type="text"
       data-bind="value: Name, attr: {name : 'Rules[' + $index() + '].Name'}" />
<span class="field-validation-valid" data-valmsg-replace="true"
      data-bind="attr : { 'data-valmsg-for': 'Rules[' + $index() + '].Name'}"></span>