Durandaljs:如何过滤ko.observablearray

whe*_*ebz 0 asp.net-mvc-4 single-page-application durandal

我是durundaljs的新手

我想知道如何过滤ko.observablearray

define(['services/logger','data/data','functions/func'],function(logger,data,func){var vm = {list:ko.observableArray([])}; return vm;} );

我想过滤列表中的项目并将其显示在表格中

谢谢

Eva*_*sen 8

Knockout具有未记录的实用程序功能,但它们存在于库中以帮助过滤数组.

以下是处理数组的所有实用方法的完整列表:

ko.utils.arrayFilter
ko.utils.arrayFirst
ko.utils.arrayForEach
ko.utils.arrayIndexOf
ko.utils.arrayMap
ko.utils.arrayPushAll
ko.utils.arrayRemoveItem
ko.utils.compareArrays
ko.utils.unwrapObservable
Run Code Online (Sandbox Code Playgroud)

和Ryan Niemeyer撰写了一篇关于如何使用其中一些内容的精彩博文.


方法1

以下是一个快速启动示例:

var newList = ko.utils.arrayFilter(list(), function(item) {
   return item.price > 10;
});
Run Code Online (Sandbox Code Playgroud)

这会创建一个newList价格超过10的商品.然后,您可以通过传递新列表来更改当前列表:

list(newList);
Run Code Online (Sandbox Code Playgroud)

方法2

另一个选项是找到要删除的项目.假设您要删除价格超过10的所有商品:

var rList = ko.utils.arrayFilter(list(), function(item) {
   return item.price > 10;
});
Run Code Online (Sandbox Code Playgroud)

接下来你可以打电话:

list.removeAll(rList);
Run Code Online (Sandbox Code Playgroud)

方法3

正如他们所说,有一种方法可以隐喻猫皮:

list.remove(function(item) { return item.price > 10 });
Run Code Online (Sandbox Code Playgroud)

你有它..

我相信还有很多方法可以做到.如果您需要一些更高级的过滤数组方法,我建议您查看underscore.js