【发布时间】: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.currentRoute、MyApp.get和MyApp.set都是未定义。
我的一部分认为这是 ember-cli 中的一个错误,即应用程序实例不再具有绑定的 getter 和 setter。我的一部分意识到将东西存储在应用程序实例上也不是一个好习惯。
我可以通过将 MyApp.get 和 MyApp.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 injection 和initializers
-
感谢@BasementKeyboardHero,依赖注入正是我需要避免全局应用程序属性。如果您将其发布为这个问题的答案,而不是仅仅建议在 cmets 中使用它,那么对其他人会很好。还是谢谢!
标签: ember.js ember-cli ecmascript-6