4

我似乎对下面的代码有问题。我的 html 中有一个 id='content' 的 div 元素。我想用 div 元素替换 el 属性的 'body' 元素,但是当我输入 el: $('div') 或 el:$('div#content') 或 el: $( '#内容')。我是backbone.js的初学者,据我所知,我相信这个el属性包含我们的父标签,我们所有的模板都将作为子元素添加(在这种情况下,'body'标签是父元素,'p'标签是孩子)。

(function($){
    var ListView = Backbone.View.extend({
    el: $('body'),      

    initialize: function(){
        this.render();
    },

    render: function(){
        (this.el).append("<p>Hello World</p>");
    }
});

var listView = new ListView();
})(jQuery);
4

1 回答 1

8

View.el属性应定义为 jQuery 选择器(字符串),而不是对 HTML 元素的引用。

骨干文档

var BodyView = Backbone.View.extend({
  el: 'body'
});

或者如你所愿,

el:'div#content'

当视图初始化时,Backbone 引用元素使其通过view.$el属性可用,该属性是一个缓存的 jQuery 对象。

this.$el.append("<p>Hello World</p>");

您发布的示例代码有效,因为始终只有一个body元素,并且在呈现视图时该元素已经存在于 DOM 中。因此,当您声明 时el:$('body'),您将获得对 body 元素的引用。中的代码render有效,因为 this.el 现在是对 jQuery 对象的直接引用:

(this.el).append("<p>Hello World</p>");

如果您需要使用现有的 DOM 元素(不是选择器)初始化 Backbone 视图,Backbone 文档建议在初始化函数中传递它。

于 2012-12-13T07:30:26.133 回答