Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Maionette批准者的流程批准isn';t函数_Javascript_Backbone.js_Url Routing_Marionette - Fatal编程技术网

Javascript Maionette批准者的流程批准isn';t函数

Javascript Maionette批准者的流程批准isn';t函数,javascript,backbone.js,url-routing,marionette,Javascript,Backbone.js,Url Routing,Marionette,在我的应用程序中,我有一个全局触发器,它在路由器上调用导航,它基本上允许我编写正常链接并触发主干路由方法 无论如何,我正在尝试将我的路由器分解成更小的路由器对象,然后将它们组合成一个主路由器,在主路由器上,我可以触发导航方法,而无需知道我正试图与哪个子路由器通话 我已经创建了一些控制器,并试图使用processAppRoutes方法将它们传递给我的AppRouter对象,但我一直收到这样的消息:它不是一个函数。我已经检查了我的版本是否是最新的,我可以在源代码中看到方法定义,但我似乎无法调用它 我

在我的应用程序中,我有一个全局触发器,它在路由器上调用
导航
,它基本上允许我编写正常链接并触发主干路由方法

无论如何,我正在尝试将我的路由器分解成更小的路由器对象,然后将它们组合成一个主路由器,在主路由器上,我可以触发
导航
方法,而无需知道我正试图与哪个子路由器通话

我已经创建了一些控制器,并试图使用
processAppRoutes
方法将它们传递给我的
AppRouter
对象,但我一直收到这样的消息:它不是一个函数。我已经检查了我的版本是否是最新的,我可以在源代码中看到方法定义,但我似乎无法调用它

我使用的是requirejs,因此我将发布一个我如何构建我的尝试的示例,为简洁起见,将其简化为相关部分

users.controller.js:

return Marionette.Controller.extend({
    routes: {
        'users/login': 'login'
    },

    login: function(){
        ...
    }
});
var UsersController = require('users.controller');

var router = new Marionette.AppRouter.extend();
router.processAppRoutes(UsersController, UsersController.routes);
routes.js:

return Marionette.Controller.extend({
    routes: {
        'users/login': 'login'
    },

    login: function(){
        ...
    }
});
var UsersController = require('users.controller');

var router = new Marionette.AppRouter.extend();
router.processAppRoutes(UsersController, UsersController.routes);
我将路由作为控制器的一个对象包含进来,以便在使用requirejs返回控制器时使它们可用,这就是为什么会这样


基本上,我的问题是:如何将路由器定义为单独的对象,然后将它们组合成整个应用程序的单个路由器?

以下是我最后要做的:

routes/routes.js:(返回一个AppRouter对象,然后可以作为木偶应用程序中唯一的AppRouter运行)

events/events.controller.js:(只是一个片段)


事实证明,在AppRouter被
new
实例化之前,我只能在AppRouter上运行
processAppRoutes()
,而且只能运行一次。通过在控制器内定义一个控制器不使用的routes对象,我可以在
routes.js
文件中访问它,并迭代路由和方法,创建一个AppRouter对象,其中包含整个应用程序的所有路由。添加一个新的控制器就像在
Controllers
对象中需要它一样简单。

这听起来很傻,但是在文档中,AppRouter是用extend中的
{}
声明的。我肯定没什么,但也许你可以试试。另外,我建议您在调用
processAppRoutes
之前放置一个
调试器。如果调试器打开,它将在该行中断。将您的
路由器
变量添加到关注列表中,并查看其内部。它看起来像一个
木偶.AppRouter
对象吗?请随意发布您在调试器中看到的扩展对象的快照。