【发布时间】:2012-07-25 11:43:03
【问题描述】:
这是示例代码。我想打破(或继续)淘汰赛的 ko.util.arrayForEach。
ko.utils.arrayForEach(items, function (item) {
if (...) break;
if (...) continue;
}
【问题讨论】:
标签: knockout.js
这是示例代码。我想打破(或继续)淘汰赛的 ko.util.arrayForEach。
ko.utils.arrayForEach(items, function (item) {
if (...) break;
if (...) continue;
}
【问题讨论】:
标签: knockout.js
看起来你不能。这是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,它将针对我们数组中的每个项目执行一个函数,并返回函数计算结果为真的第一个项目。类似于filteredItems计算的observable,我们可以创建一个从我们的搜索字段返回第一个匹配项:
//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
【讨论】:
j的意义何在?你可以做i < array.length。
只需使用 ko.utils.arrayFirst,它将在 array 上执行一个函数,并在 function 评估为 true 时立即返回/中断。
这是我最近使用的现实生活示例
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
【讨论】:
似乎ko.utils.arrayFirst 或ko.utils.arrayFilter 比您当前的方法更适合您的需求。
【讨论】: