Javascript 呈现Backbone.layoutManager视图后,元素不在DOM中
我有一些编辑器应用程序,很少有可切换的页面,每个页面在路由器中都有自己的操作。视图的设计使用。渲染完其中一个(编辑器发布)后,我需要绘制谷歌地图 当我第一次呈现此页面时(使用一个会话),$('.map')选择器返回非空结果,然后我可以在其中绘制地图。但是,当我试图在第二次呈现它时(即转到另一个页面,然后再次返回到此页面),同一代码中的同一选择器返回-“undefined”。对我来说,这意味着在我尝试选择map容器时,模板元素不在DOM中。但为什么会发生这种情况?我看不出第一页和第二页的区别 我记得当我重新渲染同一个布局管理器时发生了类似的事情。但在这段代码中,将为每个路由器的操作创建新的LM。如何解决这个问题 路由器:Javascript 呈现Backbone.layoutManager视图后,元素不在DOM中,javascript,backbone.js,Javascript,Backbone.js,我有一些编辑器应用程序,很少有可切换的页面,每个页面在路由器中都有自己的操作。视图的设计使用。渲染完其中一个(编辑器发布)后,我需要绘制谷歌地图 当我第一次呈现此页面时(使用一个会话),$('.map')选择器返回非空结果,然后我可以在其中绘制地图。但是,当我试图在第二次呈现它时(即转到另一个页面,然后再次返回到此页面),同一代码中的同一选择器返回-“undefined”。对我来说,这意味着在我尝试选择map容器时,模板元素不在DOM中。但为什么会发生这种情况?我看不出第一页和第二页的区别 我记
Editor = Backbone.Router.extend({
immo: {},
lm: {},
nav: [],
pages: [],
routes: {
'editor/basic': 'basic',
'editor/basic/:id': 'basic',
'editor/details': 'details',
'editor/details/:id': 'details',
'editor/photos': 'photos',
'editor/photos/:id': 'photos',
'editor/publish': 'publish',
'editor/publish/:id': 'publish',},
initialize: function(){
var self = this;
if (!_length(self.immo)){
self.immo = new Immo_Object();
}
},
basic: function(id){
var self = this;
self.init(new View_EditorBasic({model: self.immo}));
self.nav.push({caption: '> Next Step', link: 'details'});
self.run(id);
},
details: function(id){
var self = this;
self.init(new View_EditorDetails({model: self.immo}));
self.nav.push({caption: '< Prev Step', link: 'basic'});
self.nav.push({caption: '> Next Step', link: 'photos'});
self.run(id);
},
photos: function(id){
var self = this;
self.init(new View_EditorPhotos({model: self.immo}));
self.nav.push({caption: '< Prev Step', link: 'details'});
self.nav.push({caption: '> Next Step', link: 'publish'});
self.run(id);
},
publish: function(id){
var self = this;
self.init(new View_EditorPublish({model: self.immo}));
self.nav.push({caption: '< Prev Step', link: 'photos'});
self.run(id);
},
init: function(page){
var self = this;
self.nav = [];
self.pages = [
{name: 'basic', caption: 'Basic Infos'},
{name: 'details', caption: 'Details'},
{name: 'photos', caption: 'Photos'},
{name: 'publish', caption: 'Publish'},
];
self.lm = new Backbone.LayoutManager({
template: 'editor',
views:{
'.editor': new View_Editor({
collection: self.pages,
views: {
'.editor_form': page,
'.editor_top_nav, .editor_bottom_nav': new View_EditorNavigation({collection : self.nav})
}})
}
});
},
done: function(self){
if (!self) self=this;
self.compose_navigation();
self.lm.render(function(el){
$('#content').html(el);
$(el).find(".facts dl").columnize();
});
},
run: function(id){
var self = this;
if (id && !self.immo.get('id')){
self.immo.set({id: id});
self.immo.fetch({success: function(){
return self.done(self);
}});
}else{
self.store();
self.done();
}
},
compose_navigation: function(){
var self = this;
_.each(self.nav, function(item){
item.link = 'editor/' + item.link;
if (self.immo.get('id')) item.link += '/' + self.immo.get('id');
});
},
store: function(){
var self = this;
var form = $('.editor_form form').serializeObject();
self.immo.set(form);
return true;
},
});
问题所在的视图:
View_EditorPublish = Backbone.View.extend({
template: 'details',
serialize: function(){
return {immo: this.model, details: Immo.details(this.model)};
},
render: function(layout){
return layout(this).render().then(function(el) {
$(el).find(".facts dl").columnize();
console.log($('.map'));
});
},
});
您是如何组织模板的?因为我遇到了类似的问题,并且遇到了麻烦,因为当主布局渲染时,我丢失了一些。