Javascript 在主干中对模型(阵列)进行排序?
我只是在学习脊梁骨,所以如果标题不正确,请原谅我 我想对模型进行排序(模型是数组吗?我弄错了吗?),但我做不到。在常规JS中,我可以使用此函数对数组进行排序,我知道它可以工作:Javascript 在主干中对模型(阵列)进行排序?,javascript,arrays,sorting,backbone.js,Javascript,Arrays,Sorting,Backbone.js,我只是在学习脊梁骨,所以如果标题不正确,请原谅我 我想对模型进行排序(模型是数组吗?我弄错了吗?),但我做不到。在常规JS中,我可以使用此函数对数组进行排序,我知道它可以工作: getObjects: function(obj, key, val) { var objects = []; for (var i in obj) { if (!obj.hasOwnProperty(i)) continue; if (typeof obj[i] == 'object') {
getObjects: function(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else if (i == key && obj[key] == val) {
objects.push(obj);
}
}
return objects;
}
但我不知道该把这个放在哪。我试着把它放到视图中,但是我得到一个错误,对getObjects来说“undefined不是一个函数”
window.WineListView = Backbone.View.extend({
initialize: function () {
this.render();
},
//sort through JSON when getting different priority tasks
getObjects: function(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else if (i == key && obj[key] == val) {
objects.push(obj);
}
}
return objects;
},
render: function () {
var wines = this.model.models;
wines = getObjects(wines, 'completed', 'No');
var len = wines.length;
var startPos = (this.options.page - 1) * 8;
var endPos = Math.min(startPos + 8, len);
$(this.el).html('<ul class="thumbnails"></ul>');
for (var i = startPos; i < endPos; i++) {
$('.thumbnails', this.el).append(new WineListItemView({model: wines[i]}).render().el);
//$('.thumbnails', this.el).append('<br/>');
}
$(this.el).append(new Paginator({model: this.model, page: this.options.page}).render().el);
return this;
}
});
window.WineListView=Backbone.View.extend({
初始化:函数(){
这个。render();
},
//在获取不同优先级任务时对JSON进行排序
getObjects:函数(对象、键、值){
var对象=[];
用于(obj中的var i){
如果(!obj.hasOwnProperty(i))继续;
如果(对象的类型[i]=“对象”){
objects=objects.concat(getObjects(obj[i],key,val));
}else if(i==key&&obj[key]==val){
对象。推送(obj);
}
}
归还物品;
},
渲染:函数(){
var=this.model.models;
wines=getObjects(wines,'completed','No');
var len=长度;
var startPos=(this.options.page-1)*8;
var endPos=数学最小值(起始时间+8,长度);
$(this.el).html('
);
对于(var i=startPos;i ');
}
$(this.el).append(新的分页器({model:this.model,page:this.options.page}).render().el);
归还这个;
}
});
如何声明getObjects函数以便可以访问它?模型不是数组吗?有没有其他的分类方法?任何帮助都将不胜感激!谢谢。如果您熟悉JavaScript中对象和数组的概念,主干模型和集合分别类似于JS对象和数组的包装器对象 JS对象是一堆键值对,类似地,主干模型将键值数据存储在其属性字段中。如果像在数组中一样需要一种类型的多个项,则需要主干集合 主干模型将为您要使用的每个参数都有一个键,例如,如果您有一个Person模型,那么它将只有一个可能的firstName值。您可以将Person集合命名为Persons,然后按firstName对集合进行排序 要在主干中排序,需要为集合指定一个比较器,然后对集合调用sort 比如说
this.collection.comparator = function(person) {
return person.get('firstName');
}
this.collection.sort();
你必须用this.getObjects调用它,你可能想把葡萄酒放在它们自己的集合中,而不是像那样嵌套在模型中存储它们。此外,当您调用getObjects时,您希望在它前面加上以下内容。因此它引用了视图实例上的方法。谢谢,我现在得到了一个“uncaught rangeerror maximum call stack size Excepended”错误,但是,有什么想法吗?听起来你想要一个
集合而不是模型,因为你一直在谈论数组。