Javascript 如何理解所需的布局已经创建?

Javascript 如何理解所需的布局已经创建?,javascript,backbone.js,requirejs,underscore.js,marionette,Javascript,Backbone.js,Requirejs,Underscore.js,Marionette,在我的应用程序中,我有一些设计相似的页面和一个设计完全不同的主页。所以,我的问题是如何理解具有类似设计的页面所需的布局已经创建,而不是重新呈现。顺便说一句,在进一步的发展,可能是我会添加一些新的网页,将有不同的设计。我想了一些解决方案,但它们对我来说都是反模式的。所以,我需要以正确的方式组织我的木偶控制器。现在看起来是这样的: define(['backbone', 'marionette', 'app/app', 'session'], function (Backbone, Marionet

在我的应用程序中,我有一些设计相似的页面和一个设计完全不同的主页。所以,我的问题是如何理解具有类似设计的页面所需的布局已经创建,而不是重新呈现。顺便说一句,在进一步的发展,可能是我会添加一些新的网页,将有不同的设计。我想了一些解决方案,但它们对我来说都是反模式的。所以,我需要以正确的方式组织我的木偶控制器。现在看起来是这样的:

define(['backbone', 'marionette', 'app/app', 'session'], function (Backbone, Marionette, app, session) {

'use strict';

var main = app.mainRegion;

function mainContent (view, model, options) {

    require([view, model], function (View, Model) {

        if (...) { //if main.currentView is already 'layout/main' then...

            var model = new Model(options);
            main.currentView.content.show(new View({ model: model }));

        } else {
            require(['layout/main'], function(Layout) {

                main.show(new Layout());

                var model = new Model(options);
                main.currentView.content.show(new View({ model: model }));

            })
        }
    });

}

return Marionette.Controller.extend({

    home: function () {
        if (session.getToken() === '') {

            require(['layout/home', 'login/view', 'register/view', 'login/model',
            'register/model'], function(Layout, LoginView, RegisterView, LoginModel, RegisterModel) {

                main.show(new Layout());
                main.currentView.login.show(new LoginView({ model: new LoginModel() }));
                main.currentView.register.show(new RegisterView({ model: new RegisterModel() }));

            });

        } else {
            Backbone.history.navigate('/feed', { trigger: true });
        }
    },

    feed: function () {
        mainContent('feed/view', 'feed/model', {});
    },

    profile: function(username) {
        mainContent('profile/view', 'profile/model', { username: username });
    }

});

})

如果您正在使用区域,则无需担心。仅当视图与区域中的当前视图不同时,视图才会重新渲染。此外,您还可以手动查看:

if (main.currentView instanceof Layout) {
    ...
}

您想到了什么解决方案?@coding_idiot 1木偶文档说,如果您使用相同的视图重新调用show,默认情况下不会发生任何事情,因为视图已经在该区域中。var myView=newmyview;MyApp.mainRegion.showmyView;/*第二个show调用将重新显示视图*/MyApp.mainRegion.showmyView;。因为我认为如果我传递布局的新实例来显示,该区域将重新呈现它的当前视图,所以我想全局地创建“main/Layout”。2使用main.currentView.content.hasView,因为“布局/主页”没有“内容”区域。我不确定同一类的不同实例不会被视为不同的视图。。。顺便说一句,检查instanceof是一个非常好的主意,我认为:它就像一个符咒。