找不到RequireJS模块功能

时间:2013-05-23 05:51:10

标签: module requirejs

我有以下Backbone模块叫做router(router.js)

define(["app/facilities/messenger"], function (messenger) 
{
    return Backbone.Router.extend({
        routes: {
            "*hash": "onHashChange"
        },
        onHashChange: function (hash) {
            messenger.publish("navigate", hash);
            console.log("Publish navigate");
        },
        start: function () {
            Backbone.history.start();
        }
    });
});

然后我运行另一个名为application(application.js)的模块,如下所示:

define(["app/facilities/contentManager","app/facilities/router"], function (contentManager, router) 
{
    return 
    {
        run: function () {
            contentManager.start();
            router = router || new router();
            router.start();
        }
    }
});

我收到以下错误:

  

Uncaught TypeError:Object function(){return parent.apply(this,arguments);没有方法'start'(应用程序第6行)

我的router没有start()功能的任何想法?我很清楚它应该。

1 个答案:

答案 0 :(得分:0)

尝试更改此行:

router = router || new router();

router = new router();

我怀疑因为router总是作为对象返回,所以您的代码永远不会尝试运行new router(),而是尝试在未实体化的对象上调用.start()

如果您尝试使用该条件多次尝试避免多次调用new router(),那么可能会从模块中返回已初始化的路由器。这样,如果再次调用,RequireJS将只返回初始化的路由器,而不是另一个实例。