Javascript Marionette.js中的路由和控制器

Javascript Marionette.js中的路由和控制器,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我是新来的提线木偶。我目前正在实施路由和控制器。在我的App.js中,我有: App.appRouter = new Router({ controller:new AppController() }); 我希望AppController初始化其他控制器。所以我有一个GenericController,当散列更改为generic时,它会处理所有的事情;当散列更改为news时,它会处理所有的事情。我不想把所有的路由函数都放在一个巨大的控制器文件中。因此,我的App

我是新来的提线木偶。我目前正在实施路由和控制器。在我的App.js中,我有:

    App.appRouter = new Router({
        controller:new AppController()
    });
我希望AppController初始化其他控制器。所以我有一个GenericController,当散列更改为generic时,它会处理所有的事情;当散列更改为news时,它会处理所有的事情。我不想把所有的路由函数都放在一个巨大的控制器文件中。因此,我的AppController看起来像:

define(['App', 'backbone', 'marionette',
        "app/models/generic", "app/views/GenericList",
        'app/utils/useful_func', 'app/utils/pageslider',
        'constants',
        'app/controllers/GenericController'
        ],
    function (App, Backbone, Marionette,
        model, GenericList,
        Useful, PageSlider,
        constants,
        GenericController) {

    return Backbone.Marionette.Controller.extend({

        initialize:function (options) {

            genericController = new GenericController();

        },

    });

});
define(['App', 'backbone', 'marionette'],
    function (App, Backbone, Marionette) {

    return Backbone.Marionette.Controller.extend({

        initialize:function (options) {

        },

        getGeneric: function(){
                console.log('in getGeneric');
        },

    });
});
    appRoutes: {
        "generic": "getGeneric",
        ...
GenericController看起来像:

define(['App', 'backbone', 'marionette',
        "app/models/generic", "app/views/GenericList",
        'app/utils/useful_func', 'app/utils/pageslider',
        'constants',
        'app/controllers/GenericController'
        ],
    function (App, Backbone, Marionette,
        model, GenericList,
        Useful, PageSlider,
        constants,
        GenericController) {

    return Backbone.Marionette.Controller.extend({

        initialize:function (options) {

            genericController = new GenericController();

        },

    });

});
define(['App', 'backbone', 'marionette'],
    function (App, Backbone, Marionette) {

    return Backbone.Marionette.Controller.extend({

        initialize:function (options) {

        },

        getGeneric: function(){
                console.log('in getGeneric');
        },

    });
});
    appRoutes: {
        "generic": "getGeneric",
        ...
路由器看起来像:

define(['App', 'backbone', 'marionette',
        "app/models/generic", "app/views/GenericList",
        'app/utils/useful_func', 'app/utils/pageslider',
        'constants',
        'app/controllers/GenericController'
        ],
    function (App, Backbone, Marionette,
        model, GenericList,
        Useful, PageSlider,
        constants,
        GenericController) {

    return Backbone.Marionette.Controller.extend({

        initialize:function (options) {

            genericController = new GenericController();

        },

    });

});
define(['App', 'backbone', 'marionette'],
    function (App, Backbone, Marionette) {

    return Backbone.Marionette.Controller.extend({

        initialize:function (options) {

        },

        getGeneric: function(){
                console.log('in getGeneric');
        },

    });
});
    appRoutes: {
        "generic": "getGeneric",
        ...
但是,我最终得到了一个错误:

Method 'getGenericItem' was not found on the controller 
因为它只是查看AppController而不是GenericController中的路由器功能

如果我将getGenericItem移动到主AppController,它可以正常工作。如何在GenericController中查找路由器功能

建议您将控制器对象划分为更小的相关功能,并具有多个路由器/控制器,而不是只有一个巨大的路由器和控制器

这样做:

var AppController =  Backbone.Marionette.Controller.extend({
  initialize:function (options) {
  },    
  customAction: function() {
    console.log('in customAction');
  }
});

var GenericController = Backbone.Marionette.Controller.extend({
  initialize:function (options) {    
  },    
  getGeneric: function(){
    console.log('in getGeneric');
  }    
});

App.appRouter = new Marionette.AppRouter({
  controller:new AppController(),        
  appRoutes: {
    "custom": "customAction"
  }
});

App.genericRouter = new Marionette.AppRouter({
  controller: new GenericController(),
  appRoutes: {
    "generic": "getGeneric"
  }
});

这里有一个,但是它不起作用。

新闻控制器呢?如何拥有多个子控制器?