我是新来的淘汰赛,我试图用它显示一个系统的用户页面,每个用户都有角色上。
这些数据是在observableArray
用户。 用户对象有一个角色的属性,这是另一种observableArray
。 这个第二阵列包含每个角色的一个对象,一个ID和“授予”属性是布尔值。
我希望能够有一个特定的角色来显示所有的用户,所以还有为每个角色复选框 - 当其中一个被选中,则列表应显示与该角色的用户。
我有问题是由角色过滤1000个左右的用户需要几秒钟。 过滤通过在名称的文本是非常快(几毫秒),而是通过作用过滤不。 我已经把一些计时代码,这个问题是我用来检查用户是否具有选定角色(S)的方法,所以我只是想知道是否有这样做,也许使用一些淘汰赛的更好的方法魔法。
下面是ko.computed上,我使用做过滤视图模型。 结果表绑定到这个功能。
self.filteredUsers = ko.computed(function () {
var textFilter = self.filter(); // this is an observable bound to a text field
var checkedRoles = self.selectedRoles(); // this is a computed, which returns an array of checked roles
return ko.utils.arrayFilter(self.users(), function (user) {
var match = true;
if (user.displayName.toLowerCase().indexOf(textFilter.toLowerCase()) == -1) {
match = false;
}
// for each ticked role, check the user has the role
for (var i = 0; i < checkedRoles.length; i++) {
var roleMatch = false;
for (var j = 0; j < user.roles().length; j++) {
if (user.roles()[j].roleId === checkedRoles[i].roleId && user.roles()[j].granted()) {
roleMatch = true;
break;
}
}
if (!roleMatch) {
match = false;
}
}
return match;
});
});