Knockout:使用'if'绑定时元素无法正确呈现

时间:2013-05-28 11:39:11

标签: javascript html5 knockout.js

我有这段代码(最新的ko版本):

<tbody>
                <!-- ko foreach: searchResults-->
                <tr>
                    <td><span class="capbType" data-bind="text: type"></span> (<span data-bind="text: data.length"></span>)</td>
                    <td class="capbEntities">
                        <!-- ko foreach: data -->
                        <p data-bind="text: name"></p>

                        //THIS IS NOT RENDERING
                        <!-- ko if: $index == 3 -->
                        <span class="capbShowMore capbIcon capbIconExpand" data-bind="visible: data.length > 3,click: $root.toggleShow"><span data-bind="text: data.length - 3"></span> More</span>
                        <!-- /ko -->

                        <!-- /ko -->
                    </td>
                    <td class="capbMoreInfo">
                        <!-- ko foreach: data -->
                        <p data-bind="text: strategyName"></p>
                        <!--/ko-->
                    </td>
                </tr>
                <!--/ko-->
            </tbody>

我只想在索引为capbShowMore时呈现3元素,但出于某种原因,除了capbShowMore元素之外,所有内容都会呈现,所以我得到了这个:

<td class="capbEntities">
                        <!-- ko foreach: data -->
                        <p data-bind="text: name">FY13 SPM Strategy</p>
                        <!-- ko if:$index == 3 --><!-- /ko -->

                        <p data-bind="text: name">FY13 SPM Strategy</p>
                        <!-- ko if: $index == 3 --><!-- /ko -->

                        <p data-bind="text: name">FY11 Corporate Strategy</p>
                        <!-- ko if: $index == 3 --><!-- /ko -->

                        <p data-bind="text: name" style="display: none;">Service &amp; Portfolio Management</p>
                        <!-- ko if: $index == 3 --><!-- /ko -->

                        <p data-bind="text: name" style="display: none;">Strategy1</p>
                        <!-- ko if: $index == 3 --><!-- /ko -->

                        <p data-bind="text: name" style="display: none;">Strategy1</p>
                        <!-- ko if: $index == 3 --><!-- /ko -->

                        <p data-bind="text: name" style="display: none;">Update Admin Users - default</p>
                        <!-- ko if: $data.$index == 3 --><!-- /ko -->

                        <p data-bind="text: name" style="display: none;">Update Admin Users - Duplicates</p>
                        <!-- ko if: $index == 3 --><!-- /ko -->

                        <p data-bind="text: name" style="display: none;">Update Admin Users - Assignee is NULL</p>
                        <!-- ko if: $index == 3 --><!-- /ko -->
                        <!-- /ko -->
                    </td>

我做错了什么?

1 个答案:

答案 0 :(得分:3)

来自documentation

  

与其他绑定上下文属性不同,$index可观察

因此,如果您在表达式中使用它,则需要输出()以获取其值。

所以以下内容应该有效:

<!-- ko if: $index() == 3 -->
<!-- /ko -->