Ember.js ember cli App.get/App.set抛出未定义
我正在将基于globals的实时Ember应用程序转换为利用Ember cli的基于es6的应用程序。在我的应用程序中,我需要经常了解当前路线。在globals版本中,我就是这么做的 全局模式Ember.js ember cli App.get/App.set抛出未定义,ember.js,ember-cli,ecmascript-6,Ember.js,Ember Cli,Ecmascript 6,我正在将基于globals的实时Ember应用程序转换为利用Ember cli的基于es6的应用程序。在我的应用程序中,我需要经常了解当前路线。在globals版本中,我就是这么做的 全局模式 var MyApp = Ember.Application.create({ currentRoute : '' }); MyApp.Route = Ember.Route.extend({ actions : { didTransition : function ()
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中的一个bug,即应用程序实例不再具有绑定的getter和setter。我的一部分意识到,在应用程序实例上存储东西也不是一个很好的做法
我可以通过将
MyApp.get
和MyApp.set
的所有实例分别转换为Ember.get(MyApp,…)
和Ember.set(MyApp,…)
来解决这个问题,但我想我应该先问一下这里,因为这似乎是Ember Cli的问题,或者是有更好的推荐方法来实现我的需要。如果您查看app.js
(您正在导入的内容),它不是您的应用程序实例,而是导出Ember.application
的子类。这就是为什么it上没有get
等功能
var App = Ember.Application.extend({ <----- NOT create
modulePrefix: config.modulePrefix,
podModulePrefix: config.podModulePrefix,
Resolver: Resolver
});
export default App;
使用cli时,您不再需要使用myapp.stuff,而是导出Ember.route.extend({//your code}),并使用this.set代替myapp.set。您只需要导入Ember,
import Ember from'Ember'代码>如果您需要帮助迁移itI,我也有这个问题。我正在将一个ember starter kit应用程序迁移到ember cli,但我遇到了以下问题:我曾将当前用户的信息存储在应用程序对象的属性中。因此,我在整个应用程序中使用了App.get('currentUser')
,在登录/注销时使用了App.set('currentUser',x)
。现在这不起作用了。我可以申请什么作为类似用途的替代方案?抄送@BasementKeyboardHero@Ernesto您必须了解并感谢@BasementKeyboardHero,依赖注入正是我避免全局应用程序属性所需要的。如果你把这篇文章作为对这个问题的回答,而不是仅仅在评论中建议使用它,那对其他人来说是件好事。无论如何谢谢你!在我问这个问题后的几个月里,我已经把这一切都弄明白了,但是谢谢你在这过程中为其他人提供的答案!是的。我最讨厌的莫过于对堆栈溢出问题的隐藏解决方案。请注意,自Ember 1.0.0以来,这种解决方案一直被弃用this.container
应替换为Ember.getOwner(this)
Ember.getOwner(this).lookup('application:main')