我无法弄清楚如何在KOjs的foreach中使用迭代。 我需要的是对像这样的数组的内容进行分组
Var x = [{name: Joel, sex: male}, {name: Eric, sex: male},{name:Elliot, sex:female}, {name:Mary, sex:female}]
因此,结果数据绑定foreach将显示人的性别,但只显示一次作为标签。 像这样的东西
-male
Joel
Eric
-female
Elliot
Mary
对于正常的for循环,它就像创建一个保存最后一个条目性别的变量一样简单,如果变化则打印新的变量。像
这样的东西If(this.sex != cachedSex){
cachedSex=this.sex;
console.log(cachedSex);
}
但我无法弄明白如何在KO.js中做到这一点 请给我一个建议。
答案 0 :(得分:1)
Knockout允许你使用计算的observables以巧妙的方式解决这个问题:)
如果您需要完整的代码示例here is a fiddle illustrating this solution。
让我们说你的所有人都被称为people
并且它是observableArray
:
var that = this;
this.people = ko.observableArray([{name: Joel, sex: male}, {name: Eric, sex: male},{name:Elliot, sex:female}, {name:Mary, sex:female}])
现在我们只希望男性和女性分开:
this.males = ko.computed(function(){
return that.people().filter(function(person){
return person.sex === "male";
});
});
this.females = ko.computed(function(){
return that.people().filter(function(person){
return person.sex === "females ";
});
});
(当然 - 如果你重复这种代码 - 用它来制作一个函数而不是重复自己:))
然后,您可以正常执行foreach
绑定,一次适用于females
,一次适用于males
答案 1 :(得分:0)
Benjamins的回答是正确的,但还有另一种方法,无需创建额外的observableArrays。在视图中,您可以简单地执行foreach绑定并在其中放置一小段逻辑来处理过滤。它是最简单的方式,但在未来的道路上,您可以争辩说,根据您的应用,可能有更适合的替代品,如benjamins
这将允许您在视图中执行一些基本过滤。您还可以设置一个自定义绑定处理程序,您可以在该过滤器中传递它以使其更加高效和干净