get('order')如何工作?

时间:2013-01-03 04:27:28

标签: javascript backbone.js

我正在使用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')的工作原理?

2 个答案:

答案 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。分离属性和属性有多种原因,其中几个主要原因是:

  1. 您不希望模型属性与属性和方法存在命名冲突。
  2. 您想知道模型的哪些部分应该保存到服务器并发送到模板进行渲染(请参阅toJSONannotated source)。
  3. 另一个教训是,一旦掌握了JavaScript的基本知识,Backbone源实际上非常易读且易于理解。当你不了解Backbone内部的方法时,annotated source很方便。