比較を使用して特定の要素を無視するようにforeachを制御するにはどうすればよいですか?
たとえば、私が欲しいのは次のようなものです:
<div data-bind="foreach: entry where (entry.number > 10)">
つまり、entry
をループ処理して、現在のentry
のnumber
値が10を超える場合にのみ実行するようにします。
これは可能ですか?
現在、knockout.jsではそれは不可能ですが、興味深い機能です。バグレポートを提出するか、作者に連絡して、将来のバージョンで検討する必要があります。
方法1:
<div data-bind="foreach: entry">
<div data-bind="if: entry.number > 10"></div>
</div>
方法2:
条件に一致する要素の配列を提供するカスタムフィルターメソッドを作成し、これをforeach
で使用します。
これを試して:
<div data-bind="foreach: editingItem.columns">
<!-- ko if: Selected-->
<div data-bind="text: Name"></div>
<input type="text"/>
<!-- /ko -->
組み込みの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にデータバインドするだけです。
どうですか
<div data-bind="foreach: _.filter(entry(), function(item) { return item.number > 10;})">
underscore.jsの使用