Подтвердить что ты не робот

Knockout.js меняет видимый статус на основе if array is empty or not

Я хочу иметь возможность показывать таблицу только в том случае, если в массиве есть элементы. Я упростил свои потребности в этом 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);

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>

В основном у меня есть веб-приложение, где строки можно удалить из таблицы. Если array.length == 0, я хочу скрыть всю таблицу.

4b9b3361

Ответ 1

Вы можете сделать это несколькими способами. В приведенной ниже скрипте используются контейнеры без контейнера, чтобы скрыть всю таблицу, если в массиве строк нет записей.

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 -->​

Ответ 2

Другое решение, небольшое изменение в вашей первоначальной попытке:

<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>

Ответ 3

Сложная практика заключается в добавлении логики в шаблон html. Я предлагаю это решение:

<div data-bind="with: lines">     
    <span data-bind="if: length">Lines Exist</span>
    <ul data-bind='foreach:$data'>
        <li>
            <button data-bind="click:$parent.remove">
                Remove
            </button>
            <span data-bind="text:content"></span>
        </li>
    </ul>
</div>

Ответ 4

если вы хотите показать сообщение или изображение следующим образом jsfiddle example

<div data-bind="visible:lines().length">
    You will see this message only when "lines" holds a true value.
    <img src=""/>
</div>

если вы хотите скрыть сообщение, когда строки таблицы оказались успешными

<div data-bind="visible: !lines().length">
    You will see this message only when "lines" holds a false value.
    <img src=""/>
</div>