4

在backbone.js ToDos 示例中,initializeToDo 构造函数的方法将title属性设置为默认标题。

这不是不必要的吗?我认为默认值的重点是它们会自动分配?还是我错过了什么?

var Todo = Backbone.Model.extend({ 

    // Default attributes for the todo item.
    defaults: function() {
      return {
        title: "empty todo...",
        order: Todos.nextOrder(),
        done: false
      };
    },

    // Ensure that each todo created has `title`.
    initialize: function() {
      if (!this.get("title")) {
        this.set({"title": this.defaults().title});
      }
    },

    ///...

);}
4

1 回答 1

5

仅当没有将相应的属性传递给构造函数时才会应用默认值。在这种情况下,可能是为了确保以空字符串作为标题创建的项目显示其中包含某些内容。比较

var Todo1 = Backbone.Model.extend({

    defaults: function() {
      return {
        title: "empty todo...",
        done: false
      };
    },

    initialize: function() {
      if (!this.get("title")) {
        this.set({"title": this.defaults().title});
      }
    }
});
var t1 = new Todo1({
    title: ""
});

var Todo2 = Backbone.Model.extend({

    // Default attributes for the todo item.
    defaults: function() {
      return {
        title: "empty todo...",
        done: false
      };
    }
});

var t2 = new Todo2({
    title: ""
});

t1.get('title')将是空的 todo...并且t2.get('title')将是一个空字符串。不向两个构造函数传递任何参数确实会使用默认值。

还有一个小提琴http://jsfiddle.net/nikoshr/CeEDg/

于 2012-09-13T16:38:46.513 回答