我有以下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()
功能的任何想法?我很清楚它应该。
答案 0 :(得分:0)
尝试更改此行:
router = router || new router();
到
router = new router();
我怀疑因为router
总是作为对象返回,所以您的代码永远不会尝试运行new router()
,而是尝试在未实体化的对象上调用.start()
。
如果您尝试使用该条件多次尝试避免多次调用new router()
,那么可能会从模块中返回已初始化的路由器。这样,如果再次调用,RequireJS将只返回初始化的路由器,而不是另一个实例。