当我定义骨干视图时,视图元素是否必须加载到DOM中?

时间:2014-01-23 11:05:57

标签: backbone.js amd

我有一些代码定义了加载网页后加载的骨干视图。 JavaScript可能在DOM完全加载之前执行。如果在运行定义视图的代码时,变为$ el的dom元素不可用,这是一个问题吗?

以编程方式我有这样的事情:

var view = Backbone.View.extend({
        el: jQuery("#test")

    events: {
    }
    render: function() {
        this.$el.html();
    }

   //other view code

});

return view;

//一段时间过去了 //使用上面呈现的视图我现在调用:

view.render()

问题是当调用render方法时,$ el是未定义的。这是因为当执行第一个代码块时#test尚未加载到DOM中。所以;当调用函数Backbone.View.extend时,必须加载'el'元素?

这是通过AMD加载的骨干应用程序的上下文。第一个代码块在一个模块中。在加载DOM之前,该模块是“必需的”。这是个常见的问题吗?通常如何处理?

由于

1 个答案:

答案 0 :(得分:0)

el不应该是jQuery对象,而应该只是一个选择器,$ el将是该选择器的jQuery对象。您还必须在初始化时找到您指定为el的ID。所以是的,元素必须在dom之前才能成为视图的元素。

如果您在创建Backbone视图之前没有创建/填充视图,您可以执行类似这样的操作,让骨干为您创建html标记等:

var view = Backbone.View.extend({
    tagName: 'div',
    id: 'test',

    events: {
    },

    render: function() {
        this.$el.html();
    },

    //other view code

});

然后,您可以使用模板填充渲染功能中的视图。

简答:是的,初始化视图时必须将视图元素加载到DOM中。