web-dev-qa-db-ja.com

Knockout.js foreach:ただし、比較がtrueの場合のみ

比較を使用して特定の要素を無視するようにforeachを制御するにはどうすればよいですか?

たとえば、私が欲しいのは次のようなものです:

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

つまり、entryをループ処理して、現在のentrynumber値が10を超える場合にのみ実行するようにします。

これは可能ですか?

26
LouwHopley

現在、knockout.jsではそれは不可能ですが、興味深い機能です。バグレポートを提出するか、作者に連絡して、将来のバージョンで検討する必要があります。

方法1:

<div data-bind="foreach: entry">
     <div data-bind="if: entry.number > 10"></div>
</div>

方法2:
条件に一致する要素の配列を提供するカスタムフィルターメソッドを作成し、これをforeachで使用します。

27
Björn Kaiser

これを試して:

   <div data-bind="foreach: editingItem.columns">
         <!-- ko if: Selected-->
         <div data-bind="text: Name"></div>
          <input type="text"/>
             <!-- /ko -->
18
JustMe

組み込みの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);

次に、通常どおり、filteredEntriesにデータバインドするだけです。

8
Simon

どうですか

<div data-bind="foreach: _.filter(entry(), function(item) { return item.number > 10;})">

underscore.jsの使用

4
kernowcode