模型中是否可以包含私有(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);
}
};
})());