视图初始化函数
在构造 View 之后,由 Backbone 调用 initialize
。
可选参数
initialize
函数接收传递给视图构造函数的所有参数。通常,用于传递视图默认选项的选项哈希:
['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']
你可以将任何自定义属性添加到选项哈希和/或自定义参数。
var MyView = Backbone.View.extend({
initialize: function(options, customParam){
// ensure that the 'options' is a hash to avoid errors if undefined.
options = options || {};
this.customAttribute = options.customAttribute;
this.customParam = customParam;
},
});
并构建视图:
var view = new MyView({
model: new Backbone.Model(),
template: "<p>a template</p>",
customAttribute: "our custom attribute"
}, "my custom param");
请注意,所有默认视图选项都会自动添加到视图对象中,因此不必在 initialize
函数中执行此操作。
立即渲染模式
initialize
方法的一个常见模式是调用 render
方法,以便立即呈现任何新构造的 View
此模式仅应用于构造对象应立即将其呈现给 HTML 文档,绑定所有事件侦听器以及执行与在 DOM 中放置内容相关联的所有其他操作的实例。
var MyView = Backbone.View.extend({
initialize: function() {
this.render();
},
render: function() {
this.$el.html("<p>I'm running!</p>");
}
});
然而,应该注意的是,在手动调用 .render
之前(或通过其他方法),不应立即呈现某些视图。
另一个常见的 initialize
模式是向 View 对象添加以后需要的东西:
var MyView = Backbone.View.extend({
el: "body",
template: _.template( "<p>This is <%= name %>'s page</p>" ),
initialize: function(){
this.name = "Bill";
this.render();
},
render: function(){
var viewTemplateData = {
name: this.name
};
this.$el.html( this.template( viewTemplateData ) );
}
});
DOM 现在将在 body
中包含 <p>This is Bill's page</p>
。