【问题标题】:ember-cli App.get / App.set throw undefinedember-cli App.get / App.set throw undefined
【发布时间】:2014-12-20 15:40:32
【问题描述】:

我正在将基于全局的实时 Ember 应用程序转换为使用 ember-cli 的基于 es6 的应用程序。在我的应用程序中,我需要经常知道当前路线。在全局版本中,我正在这样做。

全局模式

var MyApp = Ember.Application.create({
    currentRoute : ''
});

MyApp.Route = Ember.Route.extend({
    actions : {
        didTransition : function () {
            MyApp.set('currentRoute', this);
        }
    }
});

然后我可以在我的会话或离线控制器中执行MyApp.get('currentRoute'),以确定在某些事件发生时如何/在何处进行转换。

使用 ember-cli 时,我导入应用程序以便能够从必要的控制器中引用它。

import MyApp from "../app";

但事实证明MyApp.currentRouteMyApp.getMyApp.set都是未定义

我的一部分认为这是 ember-cli 中的一个错误,即应用程序实例不再具有绑定的 getter 和 setter。我的一部分意识到将东西存储在应用程序实例上也不是一个好习惯。

我可以通过将 MyApp.getMyApp.set 的所有实例分别转换为 Ember.get(MyApp, ...)Ember.set(MyApp, ...) 来解决这个问题,但我想我会先在这里问,因为这似乎是 Ember 的问题-Cli 或其他有更好推荐方法来实现我需要的东西。

【问题讨论】:

  • 使用 cli 时不再需要 myapp.stuff,而是 export Ember.route.extend({//your code}) 和使用 this.set 而不是 MyApp.set
  • 您唯一需要导入的是 ember,import Ember from 'ember'; ping me in the chat 如果您需要帮助迁移它
  • 我也遇到了这个问题。我正在将一个 ember-starter kit 应用程序迁移到 ember-cli,我遇到了以下问题:我曾经将有关当前用户的信息存储在 App 对象的属性中。所以我在整个应用程序中使用了App.get('currentUser'),并在登录/注销时使用了App.set('currentUser', x)。现在这行不通了。我可以申请什么作为类似用途的替代品? cc @BasementKeyboardHero
  • @Ernesto 你得看看dependency injectioninitializers
  • 感谢@BasementKeyboardHero,依赖注入正是我需要避免全局应用程序属性。如果您将其发布为这个问题的答案,而不是仅仅建议在 cmets 中使用它,那么对其他人会很好。还是谢谢!

标签: ember.js ember-cli ecmascript-6


【解决方案1】:

如果您查看app.js(您正在导入的内容),它不是您的应用程序实例,它正在导出Ember.Application子类。这就是为什么get et al 不可用的原因。

var App = Ember.Application.extend({   <----- NOT create
    modulePrefix: config.modulePrefix,
    podModulePrefix: config.podModulePrefix,
    Resolver: Resolver
});

export default App;

要从您的路由中获取实际的应用程序实例,请使用:

Ember.getOwner(this).lookup('application:main')

【讨论】:

  • 在我问这个问题的几个月里,我已经想通了,但是感谢一路上其他人的回答!
  • 是的。没有什么比堆栈溢出问题的隐藏解决方案更让我讨厌的了。
  • 请注意,自 Ember 1.0.0 以来已弃用。 this.container 应替换为 Ember.getOwner(this)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 2015-08-06
  • 2016-04-12
  • 2014-10-28
相关资源
最近更新 更多