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
, я хочу скрыть всю таблицу.
Ответы
Ответ 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>