我最近尝试使用 Backbone,想问一个基本问题。此 View 如您所料呈现:
(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);
查看源码发现initialize函数默认是一个空函数,这让我很吃惊。我觉得答案很简单,希望有经验的 Backbone.js 开发人员提供智慧。谢谢!
最佳答案
我认为问题是在调用 this.render()
时,“this”指的是模块的上下文,而不是主干 View 。如果重构代码以删除 this.render()
行并在创建 listView
实例后添加 listView.render()
应该可以解决问题。
总之,在这种情况下您不需要initialize
函数。
关于javascript - Backbone.js 初始化函数——我为什么需要它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211429/