19

これはサンプルコードです。ノックアウトのko.util.arrayForEachを壊す(または続行する)。

ko.utils.arrayForEach(items, function (item) {
    if (...) break;
    if (...) continue;
}
4

3 に答える 3

19

できないようです。arrayForEachのソースは次のとおりです(KO GitHubページのutils.jsから)

arrayForEach: function (array, action) {
    for (var i = 0, j = array.length; i < j; i++)
        action(array[i]);
},

ただし、 Knockoutはko.utils.arrayFirst、配列内の各アイテムに対して関数を実行し、関数がtrueと評価された最初のアイテムを返すことを提供します。監視可能に計算されたfilteredItemsと同様に、検索フィールドから最初の一致を返すものを作成できます。

//identify the first matching item by name
viewModel.firstMatch = ko.computed(function() {
    var search = this.search().toLowerCase();
    if (!search) {
        return null;
    } else {
        return ko.utils.arrayFirst(this.filteredItems(), function(item) {
            return ko.utils.stringStartsWith(item.name().toLowerCase(), search);
        });
    }
}, viewModel);

詳細については、http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.htmlをご覧ください。

于 2012-07-25T15:58:56.677 に答える
9

現在のアプローチよりもニーズに合っているようko.utils.arrayFirstです。ko.utils.arrayFilter

于 2012-07-25T11:48:09.690 に答える
1

を使用するだけで、とでko.utils.arrayFirst関数が実行され、がtrueと評価されるとすぐに戻り/中断します。arrayfunction

これが私が最近使った実例です

this.updateElement = function (model) {
    ko.utils.arrayFirst(that.list(), function (m) {
        if (model.formId() === m.formId()) {
            m.description(model.description());
            m.status(model.status());
            m.type(model.type());
        }
    });
}

詳細については、http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.htmlをご覧ください。

于 2018-05-16T15:09:46.080 に答える