【问题标题】:Accessing app object from Marionette ItemView method从 Marionette ItemView 方法访问应用程序对象
【发布时间】: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 definedTypeError: 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


【解决方案1】:

要克服循环依赖,您可以检查以下内容:

https://stackoverflow.com/a/4881496/2303999

相应地管理您的模块并避免依赖关系。为您不时使用的函数制作通用 js 文件。您甚至可以使用 Marionette Vent 对象来传递事件并根据该事件进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多