我最近尝试过使用Backbone,想问一个基本问题。此视图正如您所期望的那样呈现:
(function($){
var ListView = Backbone.View.extend({
tagName: 'div',
el: $('header'),
initialize: function(){
_.bindAll(this, 'render');
this.render(); // not all views are self-rendering. This one is.
},
render: function(){
$(this.el).html("<ul> <li>hello world</li> </ul>");
}
});
var listView = new ListView();
})(jQuery);
我的问题是,为什么我不能在没有初始化函数的情况下做到这一点:
(function($){
var ListView = Backbone.View.extend({
tagName: 'div',
el: $('header'),
render: function(){
$(this.el).html("<ul> <li>hello world</li> </ul>");
}
});
this.render(); //No html is rendered on the page
var listView = new ListView();
})(jQuery);
我查看了源代码,默认情况下初始化函数是一个空函数,这让我感到惊讶。我觉得答案很直接,会感谢更有经验的Backbone.js开发人员的智慧。谢谢!
答案 0 :(得分:2)
我认为问题在于,您正在致电this.render()
,&#39;这个&#39;指的是模块的上下文而不是Backbone View。如果您重构代码以删除this.render()
行并在listView.render()
实例创建后添加listView
,则应解决此问题。
总之,在这种情况下,您不需要initialize
功能。
答案 1 :(得分:2)
试试这个
(function ($) {
var ListView = Backbone.View.extend({
tagName: 'div',
el: $('header'),
render: function () {
$(this.el).html("<ul> <li>hello world</li> </ul>");
}
});
var listView = new ListView();
// Call render on the view instance
listView.render();
})(jQuery);