Backbone.js初始化函数 - 为什么需要它?

时间:2013-08-13 14:09:49

标签: javascript jquery backbone.js

我最近尝试过使用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开发人员的智慧。谢谢!

2 个答案:

答案 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);