4

backbone.js のToDos の例initializeでは、ToDo コンストラクターのメソッドが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 に答える