Knockout.js foreach: но только если сравнение верно
Как я могу контролировать foreach игнорировать некоторые элементы с помощью сравнения?
Я хочу, например, что-то вроде этого:
<div data-bind="foreach: entry where (entry.number > 10)">
Так что я хотел бы, чтобы это было сделано, это цикл через entry
, но выполняться только тогда, когда текущий ток entry
имеет значение number
больше 10.
Можно ли это сделать?
Ответы
Ответ 1
В настоящее время это невозможно с knockout.js, но это интересная особенность. Вы должны подать отчет об ошибке/связаться с автором, чтобы рассмотреть его для будущей версии.
Способ 1:
<div data-bind="foreach: entry">
<div data-bind="if: entry.number > 10"></div>
</div>
Способ 2:
Напишите специальный метод фильтрации, который дает вам массив элементов, соответствующих вашим условиям, и используйте его в foreach
.
Ответ 2
попробуйте следующее:
<div data-bind="foreach: editingItem.columns">
<!-- ko if: Selected-->
<div data-bind="text: Name"></div>
<input type="text"/>
<!-- /ko -->
Ответ 3
Я думаю, что было бы лучше использовать встроенный метод arrayFilter (см. http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html)
viewModel.filteredEntries = ko.computed(function() {
return ko.utils.arrayFilter(this.entries(), function(item) {
return item.number > 10;
});
}, viewModel);
Затем вы можете просто привязать данные к фильтрованным элементам, как обычно,
Ответ 4
Что насчет
<div data-bind="foreach: _.filter(entry(), function(item) { return item.number > 10;})">
используя underscore.js