Backbone.js - 这个参数的价值来自哪里?

时间:2011-12-06 23:32:38

标签: javascript backbone.js

我不确定如何以一种可以理解的方式表达我的问题,所以我在下面创建了一个图表。该示例特定于JavaScript和Backbone.js,但我认为这也可能被视为一般编程问题。

我有一个Backbone集合的例子,我无法理解值是如何传递的。我假设'任务'可以很容易地像'taco'或'horse'那样任意值,并且工作得很好。我只是想知道“任务”在何处以及如何将其值映射到它。

以下是我如何看待这个问题,我试图在下面重新构建我的困惑之路:

enter image description here

如果有帮助,这是任务模型:

var Task = Backbone.Model.extend({
  isComplete: function() {
    return this.get('completed_at') !== null;
  }
});

2 个答案:

答案 0 :(得分:1)

比较器函数由下划线的_.sortBy调用,数组元素作为参数,有大量的对象创建和迭代正在进行,本质上归结为更快的本机排序:

someArrayOfTasks.sort( function( taskA, taskB ) {
return taskA.dueDate < taskB.dueDate ? -1 :
       taskA.dueDate > taskB.dueDate ? 1 : 0;
});

或者更简单的例子:

[3,2,5,1,4].sort( function(a,b){
return a-b;
});
//[1, 2, 3, 4, 5]

[3,2,5,1,4].sort( function(a,b){
return b-a;
});
//[5, 4, 3, 2, 1]

比较器函数在尝试解析排序顺序时从sort函数获取其参数,从比较器返回的值确定数组的排序顺序。

我建议对主干排序进行正常排序,因为它对我来说比使用Chrome快10倍且更容易理解,因为比较器功能实际上......比较:http://jsperf.com/underscore-sort-vs-normal-sort

答案 1 :(得分:0)

Collection的Comparator函数将Model作为输入。我认为你必须编写比较器,如:

function (task){
  return task.get('dueDate');
}

注意:骨干比较器与普通JS阵列排序比较器不同!