Javascript 呈现Backbone.layoutManager视图后,元素不在DOM中

Javascript 呈现Backbone.layoutManager视图后,元素不在DOM中,javascript,backbone.js,Javascript,Backbone.js,我有一些编辑器应用程序,很少有可切换的页面,每个页面在路由器中都有自己的操作。视图的设计使用。渲染完其中一个(编辑器发布)后,我需要绘制谷歌地图 当我第一次呈现此页面时(使用一个会话),$('.map')选择器返回非空结果,然后我可以在其中绘制地图。但是,当我试图在第二次呈现它时(即转到另一个页面,然后再次返回到此页面),同一代码中的同一选择器返回-“undefined”。对我来说,这意味着在我尝试选择map容器时,模板元素不在DOM中。但为什么会发生这种情况?我看不出第一页和第二页的区别 我记

我有一些编辑器应用程序,很少有可切换的页面,每个页面在路由器中都有自己的操作。视图的设计使用。渲染完其中一个(编辑器发布)后,我需要绘制谷歌地图

当我第一次呈现此页面时(使用一个会话),$('.map')选择器返回非空结果,然后我可以在其中绘制地图。但是,当我试图在第二次呈现它时(即转到另一个页面,然后再次返回到此页面),同一代码中的同一选择器返回-“undefined”。对我来说,这意味着在我尝试选择map容器时,模板元素不在DOM中。但为什么会发生这种情况?我看不出第一页和第二页的区别

我记得当我重新渲染同一个布局管理器时发生了类似的事情。但在这段代码中,将为每个路由器的操作创建新的LM。如何解决这个问题

路由器:

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'));
        });
    },
});

您是如何组织模板的?因为我遇到了类似的问题,并且遇到了麻烦,因为当主布局渲染时,我丢失了一些。