我正在使用JavaScript和Backbone.js。现在我正在阅读Addy Osmani撰写的Todo application example in Backbone.js,并与以下部分混淆:
// We keep the Todos in sequential order, despite being saved by unordered
// GUID in the database. This generates the next order number for new items.
nextOrder: function() {
if ( !this.length ) {
return 1;
}
return this.last().get('order') + 1;
},
// Todos are sorted by their original insertion order.
comparator: function( todo ) {
return todo.get('order');
}
事实上我在其他地方找不到任何'order'
属性,是否有人可以指出get('order')
的工作原理?
答案 0 :(得分:1)
查看调用nextOrder的位置:
var Todo = Backbone.Model.extend({
defaults: function() {
return {
title: "empty todo...",
order: Todos.nextOrder(),
done: false
};
},
我们在这里设置模型的顺序。如果没有任何现有订单,则将其设置为1.如果有,则最后一个订单具有迄今为止最高的指数。
答案 1 :(得分:1)
快速查看source for get
将具有指导意义:
get: function(attr) {
return this.attributes[attr];
}
因此,当您说m.get('a')
时,Backbone会在'a'
内寻找m.attributes
。这里的重要一课是Backbone模型属性和JavaScript对象属性不同:您使用a
访问属性m.get('a')
,而通过p
访问属性m.p
。分离属性和属性有多种原因,其中几个主要原因是:
toJSON
和annotated source)。另一个教训是,一旦掌握了JavaScript的基本知识,Backbone源实际上非常易读且易于理解。当你不了解Backbone内部的方法时,annotated source很方便。