Backbone Model默认 - todos.js示例中不必要的代码?

时间:2012-09-13 16:27:23

标签: javascript backbone.js

在backbone.js ToDos example中,ToDo构造函数的initialize方法将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});
      }
    },

    ///...

);}

1 个答案:

答案 0 :(得分: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/