【发布时间】:2014-03-18 15:55:39
【问题描述】:
在下面的代码中,我尝试使用动态需求来触发事件。由于某种原因,我无法在 eventRouter 方法中访问 app 对象。我收到“TypeError:应用程序未定义”错误。我已经在各自的控制器文件中实现了 show 事件监听器。
我的问题类似于 this 帖子,除了我的侦听器位于不同的控制器文件中,并且我无法按照帖子中的建议访问 app 对象。
帮助表示赞赏!!!!
define(["app",
"tpl!templates/nav/nav.tpl",
"tpl!templates/nav/navMenuItem.tpl",
"entities/navEntity"
],
function(app, navTpl, navMenuItem, navEntity){
navMenuItem = Backbone.Marionette.ItemView.extend({
template: navMenuItem,
events: {
"click a": "eventRouter"
},
eventRouter:function(ev)
{
var that = this;
var moduleName = $(ev.currentTarget).text().toLowerCase();
require(['controllers/' + moduleName + 'Controller'], function(controller){
app.trigger(moduleName + ':show');
});
}
});
navMenu = Backbone.Marionette.CollectionView.extend({
tagName: 'ul',
itemView: navMenuItem,
collection: navEntity.navItems,
});
return {
navMenu: navMenu,
navMenuItem: navMenuItem
}
});
【问题讨论】:
-
"TypeError: app is undefined" 是错误。我应该更具体。我正在尝试在 eventRouting 方法中获取 app 对象。
-
当我在 Chrome 中检查时,我会根据不同的情况得到什么样的错误消息,我得到的是
ReferenceError: app is not defined或TypeError: Cannot call method 'trigger' of undefined。第一个不应该发生,因为您将app作为函数参数。你确定你得到的实际错误不是第二个吗?行号是否与您问题中app.trigger的位置相对应? -
听起来可能是循环依赖。您的应用需要上述模块吗?
-
看起来我的问题是视图无法访问应用程序对象。我也收到以下代码的“TypeError:app is undefined”错误。
define(["app"], function(app){ console.log(app); }) -
T Nguyen 关于循环依赖是正确的。我在返回 app 之前调用 app.js 中的视图。
标签: backbone.js requirejs marionette