Backbone.js 如何使用';el';是动态创建的吗?
我有两个视图——叠加视图和故事视图。StoryView需要附加到OverlayView(两者都是动态创建的)。我在OverlayView中动态创建了#overlay div,但是当我将StoryView的'el'设置为#overlay时,StoryView的这个。$el是一个空数组。创建StoryView时,#overlay div肯定存在于DOM中 如何让StoryView将动态创建的覆盖识别为其“el”?我假设“el”应该是视图附加到的“父”容器,对吗?OverlayView的“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”应该是
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对象,您就会没事了
工作示例。您的问题是您的
故事视图
el
时尝试检索对象(该对象尚不存在)。只需将el:$('#overlay')
更改为el:'#overlay'
。您也可以在第一个视图中对$('body')
执行相同的操作,因为这不是必需的。只要始终使用选择器而不是jQuery对象,您就会没事了
工作示例。你说得对,我不必要地将其包装在jQuery对象中。谢谢你说得对,我不必要地将其包装到jQuery对象中。谢谢