knockout.js根据数组是否为空来更改可见状态

Omi*_*nus 27 knockout.js

我希望只有在数组中有项目时才能显示表格.我已经简化了我对这个jsfiddle例子的需求.

JS:

var view_model = {
    lines: ko.observableArray([
        {
        content: 'one'},
    {
        content: 'two'},
    {
        content: 'three'},
    {
        content: 'four'},
        ]),
    remove: function(data) {
        view_model.lines.remove(data);
    }
};

ko.applyBindings(view_model);
Run Code Online (Sandbox Code Playgroud)

HTML:

<span data-bind="visible:lines">Lines Exist</span> 
<ul data-bind='foreach:lines'>
    <li>
        <button data-bind="click:$parent.remove">
            Remove
        </button>
        <span data-bind="text:content"></span>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

基本上我有一个网络应用程序,可以从表中删除行.如果array.length == 0,我想隐藏整个表格.

Joh*_*apa 42

您可以通过多种方式完成此操作.如果lines数组没有条目,下面的小提琴使用无容器绑定来隐藏整个表.

http://jsfiddle.net/johnpapa/WLapt/4/

<span data-bind="visible:lines">Lines Exist</span> 
<!-- ko if: lines().length > 0-->
<p>Here is my table</p>
<ul data-bind='foreach:lines'>
    <li>
        <button data-bind="click:$parent.remove">
            Remove
        </button>
        <span data-bind="text:content"></span>
    </li>
</ul>
<!-- /ko -->?
Run Code Online (Sandbox Code Playgroud)

  • 这真的曾经有效吗?`data-bind="visible:lines"` 现在似乎不起作用。检查你的小提琴。`data-bind="visible:lines().length"` 确实有效,但不太优雅:/ (2认同)

Lgi*_*iro 8

另一种解决方案,原始尝试略有不同:

<div data-bind="visible:lines().length">
    <span>Lines Exist</span> 
    <p>Here is my table</p>
    <ul data-bind='foreach:lines'>
        <li>
            <button data-bind="click:$parent.remove">
                Remove
            </button>
            <span data-bind="text:content"></span>
        </li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)