代码之家  ›  专栏  ›  技术社区  ›  Steve Loo

TypeError:undefined不是对象(计算“Marionette.LayoutView.extend”)

  •  -1
  • Steve Loo  · 技术社区  · 9 年前

    学习木偶并尝试使用木偶布局视图创建区域。我得到了问题标题中描述的错误消息。检查了很多次代码,但看不出问题出在哪里。希望有人能告诉我。谢谢。显然问题线是马里奥内特。LayoutView未定义,我不知道为什么:

    var AppLayoutView=马里奥内特.LayoutView扩展(

    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 回复  |  直到 9 年前
        1
  •  0
  •   Steve Loo    9 年前

    我承认我发布的问题模棱两可。我很抱歉。我学习过程的一部分。无论如何,为了记录在案,我重构了我的代码,如下所示,这对我来说是有效的。

    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();