0

我有以下称为路由器(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();
        }
    }
});

我收到以下错误:

未捕获的 TypeError: Object function (){ return parent.apply(this, arguments); } 没有方法“开始”(应用程序第 6 行)

任何想法为什么我router没有start()功能?我很清楚应该这样做。

4

1 回答 1

0

尝试更改此行:

router = router || new router();

router = new router();

我怀疑因为router总是作为对象返回,所以您的代码永远不会尝试运行new router()并且试图调用.start()未初始化的对象。

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

于 2013-05-23T10:12:04.197 回答