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

Knockout.js foreach: но только если сравнение верно

Как я могу контролировать foreach игнорировать некоторые элементы с помощью сравнения?

Я хочу, например, что-то вроде этого:

<div data-bind="foreach: entry where (entry.number > 10)">

Так что я хотел бы, чтобы это было сделано, это цикл через entry, но выполняться только тогда, когда текущий ток entry имеет значение number больше 10.

Можно ли это сделать?

4b9b3361

Ответ 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