Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Javascript 在主干中对模型(阵列)进行排序?_Javascript_Arrays_Sorting_Backbone.js - Fatal编程技术网

Javascript 在主干中对模型(阵列)进行排序?

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') {

我只是在学习脊梁骨,所以如果标题不正确,请原谅我

我想对模型进行排序(模型是数组吗?我弄错了吗?),但我做不到。在常规JS中,我可以使用此函数对数组进行排序,我知道它可以工作:

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”错误,但是,有什么想法吗?听起来你想要一个
    集合而不是
    模型,因为你一直在谈论数组。