1

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

4

2 回答 2

2

我认为问题在于,在您调用this.render()时,“this”指的是模块的上下文,而不是主干视图。如果您重构代码以删除该this.render()行并在创建实例listView.render()后添加它应该可以解决问题。listView

总之,在这种情况下,您不需要该initialize功能。

于 2013-08-13T14:19:54.173 回答
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);
于 2013-08-13T14:36:20.710 回答