TypeError:undefined不是对象(评估'Marionette.LayoutView.extend')

时间:2016-01-23 00:50:50

标签: backbone.js marionette

学习木偶并尝试使用Marionette LayoutView创建区域。我收到了问题标题中描述的错误消息。多次查看代码,但却看不出问题出在哪里。希望有人可以告诉我。谢谢。显然问题是Marionette.LayoutView是未定义的,我不知道为什么:

  

var AppLayoutView = Marionette.LayoutView.extend(

var Marionette = require('backbone.marionette'),
    Controller = require('./controller'),
    Router = require('./router'),
    UserModel = require('./models/user'),
    UsersCollection = require('./collections/users');    

module.exports = App = function App() {};

    App.prototype.start = function(){
        App.core = new Marionette.Application();

        App.core.on("initialize:before", function (options) {
            //App.core.vent.trigger('app:log', 'App: Initializing');

            App.views = {};
            App.data = {};

            //define the App regions
            var AppLayoutView = Marionette.LayoutView.extend({ 
                template: "#app-container",

                regions: {
                  headerRegion: "#header-region",
                  mainRegion: "#main-region",
                  drawerRegion: "#drawer-region",   
                  dialog: "#dialog-region"      
                }
            });

            App.mainlayout = new AppLayoutView();
            App.mainlayout.render();

            var DashLayoutView = Marionette.LayoutView.extend({ 
              template: "#dashboard-template",

              regions: {
                dashHeaderRegion: "#dbheader-region",
                dashMainRegion: "#dbmain-region",
              }
            });

            App.dashlayout = new DashLayoutView();
            App.dashlayout.render();

            // load up some initial data:
            var users = new UsersCollection();
            users.fetch({
                success: function() {
                    App.data.users = users;
                    App.core.vent.trigger('app:start');
                }
            });
        });

        App.core.vent.bind('app:start', function(options){
            //App.core.vent.trigger('app:log', 'App: Starting');
            if (Backbone.history) {
                App.controller = new Controller();
                App.router = new Router({ controller: App.controller });
                //App.core.vent.trigger('app:log', 'App: Backbone.history starting');
                Backbone.history.start();
            }

            //new up and views and render for base app here...
            //App.core.vent.trigger('app:log', 'App: Done starting and running!');
        });

        App.core.vent.bind('app:log', function(msg) {
            console.log(msg);
        });

        App.core.start();
    };

1 个答案:

答案 0 :(得分:0)

我承认我发布的问题含糊不清。我很抱歉。我学习过程的一部分。无论如何,我已经重构了我的代码,现在正在为我工​​作。

var Marionette = require('backbone.marionette'),
    Controller = require('./controller'),
    Router = require('./router');


App = new Marionette.Application();

App.on("before:start", function(){

    App.addRegions({
        headerRegion: "#header-region",
        mainHeaderRegion: "#content-header",    
        mainRegion: "#main-region",
        drawerRegion: "#drawer-region",
        dialog: "#dialog-region"
    });

});


App.on("start", function(){

    if (Backbone.history) {
        App.controller = new Controller();
        App.router= new Router({ controller: App.controller });

        //App.core.vent.trigger('app:log', 'App: Backbone.history starting');
        Backbone.history.start();
    }

});

App.vent.bind('app:log', function(msg) {
    console.log(msg);
});

App.start();