如何找到数组是否存在 - KnockOut

时间:2014-10-20 14:21:17

标签: arrays if-statement knockout.js

只有存在documentation.files时才需要运行以下代码。否则它不应该执行。

类似于:<!-- if (condition-here) -- >

<!-- ko foreach: documentation.files --> 
                                    <tr>
                                        <th>
                                            <a data-bind="attr: { href: file_link[$root.locale.selected_locale()]}" target="_blank">
                                            <div class="block" data-bind="html: file_name[$root.locale.selected_locale()]"></div>
                                            </a>
                                        </th>
    <!-- /ko -->

任何帮助都会感激不尽。

3 个答案:

答案 0 :(得分:1)

将其包装成div

<div data-bind="if: documentation.files">
   ...
</div>

<!-- ko if: documentation.files -->
   ...
<!-- /ko -->

答案 1 :(得分:1)

如果没有初始化,这应该可以解决问题:

<!-- ko if: documentation.files -- >

如果它不是undefined,那就会继续。

或者如果它被设置为空数组:

<!-- ko if: documentation.files.length > 0 -- >

我猜测它是你需要的第一个案例,否则你的foreach会在没有这个检查的情况下工作。

答案 2 :(得分:0)

好的,这是您的网络浏览器对您有所帮助并导致问题的一种情况。在这个例子中

<!-- ko foreach: documentation.files --> 
                                <tr>
                                    <th>
                                        <a data-bind="attr: { href: file_link[$root.locale.selected_locale()]}" target="_blank">
                                        <div class="block" data-bind="html: file_name[$root.locale.selected_locale()]"></div>
                                        </a>
                                    </th>
                                </tr>
<!-- /ko -->

看起来你正在尝试在表格中进行此绑定。如果是这种情况,他们很可能会从表中删除注释块并将其置于其前面。导致这样的事实实际出现

<!-- ko foreach: documentation.files --> <!-- /ko -->
                             <table>
                                <tr>
                                    <th>
                                        <a data-bind="attr: { href: file_link[$root.locale.selected_locale()]}" target="_blank">
                                        <div class="block" data-bind="html: file_name[$root.locale.selected_locale()]"></div>
                                        </a>
                                    </th>
                                </table>

现在问题显而易见,解决方法是使用thead标签并在该部分中执行foreach

<thead data-bind="foreach: documentation.files"> 
                                <tr>
                                    <th>
                                        <a data-bind="attr: { href: file_link[$root.locale.selected_locale()]}" target="_blank">
                                        <div class="block" data-bind="html: file_name[$root.locale.selected_locale()]"></div>
                                        </a>
                                    </th>
                                  </tr>
</thead>

或者如果您正在使用表体,请使用。如果这是直接复制,您需要关闭表格行标记