Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 按枚举序列的特定顺序对主干集合进行排序_Backbone.js_Backbone.js Collections - Fatal编程技术网

Backbone.js 按枚举序列的特定顺序对主干集合进行排序

Backbone.js 按枚举序列的特定顺序对主干集合进行排序,backbone.js,backbone.js-collections,Backbone.js,Backbone.js Collections,我的主干收藏如下: var model1 = new Backbone.Model({mode: 'EX'}); var model2 = new Backbone.Model({mode: 'AB'}); var model3 = new Backbone.Model({mode: 'DF'}); var model4 = new Backbone.Model({mode: 'AB'}); var model5 = new Backbone.Model({mode: 'DF'}); var m

我的主干收藏如下:

var model1 = new Backbone.Model({mode: 'EX'});
var model2 = new Backbone.Model({mode: 'AB'});
var model3 = new Backbone.Model({mode: 'DF'});
var model4 = new Backbone.Model({mode: 'AB'});
var model5 = new Backbone.Model({mode: 'DF'});
var model6 = new Backbone.Model({mode: 'AB'});

var myCollection =  new backbone.Collection([model1,model2,model3,model4,model5, model6]);
现在,我想让这个集合按照某种商业顺序进行排序,首先是所有具有“DF”模式的模型,然后是所有具有“AB”模式的模型,最后是具有“EX”模式的模型

所需输出

/*my Collection.models should contains array of models in following sequence
after sorting */
[model3, model5, model2, model4, model6, model1]
我有另一个java脚本对象,我将根据它来决定这个模式序列。e、 g

var enum = {
  1: 'DF',
  2: 'AB',
  3: 'EX'
}

所以这里的字符串排序是没有用的。有人能建议我如何在主干集合上编写comparator来完成此排序吗?您需要使用自定义的

var优先级=['DF','AB','EX'];
var Collection=Backbone.Collection.extend({
比较器:功能(a、b){
返回priority.indexOf(a.get('mode'))>priority.indexOf(b.get('mode');
}
});
var myCollection=新集合([{
模式:“EX”
}, {
模式:“AB”
}, {
模式:“DF”
}, {
模式:“AB”
}, {
模式:“DF”
}, {
模式:“AB”
}]);
console.log(myCollection.pull('mode')

我会翻转枚举器,以便您可以轻松地为其编制索引

var enumerator = {
  DF: 1,
  AB: 2,
  EX: 3
};

var YourModel = Backbone.Model.extend({
  defaults: {
    mode: ''
  }
});

var YourCollection = Backbone.Collection.extend({
  model: YourModel,
  comparator: function(m) {
    return enumerator[m.get('mode')];
  }
});

var yourCollection = new YourCollection([
  { mode: 'EX' },
  { mode: 'AB' },
  { mode: 'DF' },
  { mode: 'AB' }
]);

console.log(yourCollection.pluck('mode')); // ["DF", "AB", "AB", "EX"]

@Shaggy没问题:)很高兴我能帮上忙。谢谢@TJ的回复,我遵循了Tholl在第二次回答中给出的对象映射方法