模型中是否可以包含私有(private)属性?就像(constructor)函数中的局部声明变量一样,该变量未附加到this,而是在本地声明并且仅对(constructor)函数中定义的内容可见。
没有BB View 的示例:

function MyView(aModel){

  var $internalInput = $('<input>');

  this.render: function($where){
     $internalInput.val(aModel.get('SomeProperty'));
     $where.append($('<div class="inputWraper">').append($internalInput));
  };
  this.toggleReadonly: function() {
    toggle $internalInputs readonly attribute
  }
  ...
  + Code to bind input.val to some aModel property(ies) and setup events
  ...
}

请注意,外界无法访问internalInput,也不能访问aModel(至少通过MyView)。
因此,如果我想使用Backbone.View来实现上面的MyView,我将如何做并保持$ internalInput'private'?

最佳答案

在定义Backbone对象(而不仅仅是普通对象)时,应该通过将IIFE传递给extend来获得私有(private)数据。例如:

var Thing = Backbone.Model.extend((function () {
  var foo = "Private data!";

  return {
    bar: function () {
      console.log(foo);
    }
  };
})());

10-07 16:08