Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 如何使用';el';是动态创建的吗?_Backbone.js_Backbone Views - Fatal编程技术网

Backbone.js 如何使用';el';是动态创建的吗?

Backbone.js 如何使用';el';是动态创建的吗?,backbone.js,backbone-views,Backbone.js,Backbone Views,我有两个视图——叠加视图和故事视图。StoryView需要附加到OverlayView(两者都是动态创建的)。我在OverlayView中动态创建了#overlay div,但是当我将StoryView的'el'设置为#overlay时,StoryView的这个。$el是一个空数组。创建StoryView时,#overlay div肯定存在于DOM中 如何让StoryView将动态创建的覆盖识别为其“el”?我假设“el”应该是视图附加到的“父”容器,对吗?OverlayView的“el”应该是

我有两个视图——叠加视图和故事视图。StoryView需要附加到OverlayView(两者都是动态创建的)。我在OverlayView中动态创建了#overlay div,但是当我将StoryView的'el'设置为#overlay时,StoryView的这个。$el是一个空数组。创建StoryView时,#overlay div肯定存在于DOM中

如何让StoryView将动态创建的覆盖识别为其“el”?我假设“el”应该是视图附加到的“父”容器,对吗?OverlayView的“el”应该是“重叠”吗

覆盖视图:

OverlayView = Backbone.View.extend({
    el: $('body'),

    events: {
        'click #film': 'hideOverlay'
    },

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

    render: function() {
        this.$el.append('<div id="overlay"></div>');
        return this;
    }
});
var StoryView = Backbone.View.extend({
    el: $('#overlay'),

    events: {
        'click .close': 'closeStory'
    },

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

    render: function() {
        console.log(this.$el); // Returns empty array []
        return this;
    }
});

您的问题是您的
StoryView
el
应该只是一个选择器,而不是jQuery对象。这将导致主干在指定
el
时尝试检索对象(该对象尚不存在)。只需将
el:$('#overlay')
更改为
el:'#overlay'
。您也可以在第一个视图中对
$('body')
执行相同的操作,因为这不是必需的。只要始终使用选择器而不是jQuery对象,您就会没事了


工作示例。

您的问题是您的
故事视图
应该只是一个选择器,而不是jQuery对象。这将导致主干在指定
el
时尝试检索对象(该对象尚不存在)。只需将
el:$('#overlay')
更改为
el:'#overlay'
。您也可以在第一个视图中对
$('body')
执行相同的操作,因为这不是必需的。只要始终使用选择器而不是jQuery对象,您就会没事了


工作示例。

你说得对,我不必要地将其包装在jQuery对象中。谢谢你说得对,我不必要地将其包装到jQuery对象中。谢谢