gpt4 book ai didi

javascript - 根据三个模型属性对 Backbone 集合进行排序

转载 作者:行者123 更新时间:2023-11-30 00:11:28 25 4
gpt4 key购买 nike

我调查了 http://backbonejs.org/#Collection-comparator对于一个模型属性,如示例所示,排序工作正常。但是,我想对多个属性进行排序,以下帖子建议可以对多个属性进行排序:

Backbone.js collection comparator sort by multiple fields?

comparator: function(item) {
return [item.get("level"), item.get("title")]
}

我可以按照上面示例中的建议对两个属性进行排序,但是,如果我添加一个附加属性(第三个属性),则排序对第三个属性不起作用。

有人可以解释为什么这对一个和两个属性有效,但对三个属性无效吗?

下面是我如何定义比较器:

var aCollection = Backbone.Collection.extend({
model: Model,
comparator: function(item){
return [item.get('uid'), item.get('vid'), item.get('wid')];
},
...
});

最佳答案

需要说明的是,我在 backbone 中使用 require.js。为了解决这个问题,我进行了大量的谷歌搜索,然后尝试了以下方法,效果很好。加载我的收藏时,我创建了一个接受两个参数的 comparator 函数。示例:jsfiddle

comparator: function(a, b){

var fields = ['uid','vid','wid'],
directions = ['asc', 'asc', 'asc'],
cmpOn;

cmpOn = _.find(fields, function(c){
return a.attributes[c] != b.attributes[c];
});

if(!cmpOn) return 0;

if ( ( directions[_.indexOf( fields, cmpOn )] || 'asc' ).toLowerCase() == 'asc' ) {
return a.attributes[cmpOn] > b.attributes[cmpOn] ? 1 : -1;
} else {
return a.attributes[cmpOn] < b.attributes[cmpOn] ? 1 : -1;
}

}

关于javascript - 根据三个模型属性对 Backbone 集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36315984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com