如何从 devtools 控制台切换 Ember 功能标志

How to toggle Ember feature flags from the devtools console

我正在使用 ember-feature-flags 插件提供一些方法来切换我的 ember 应用程序中的新 UI 功能。

文档说您可以在运行时切换这些功能:

this.get('features').enable('newHomepage');
this.get('features').disable('newHomepage');

但是,这在 devtools 控制台的 "runtime" 中不起作用,因为 this 上下文将引用 Window 对象。我不想依赖 Ember Inspector 并且 [this existing question] 的答案对我不起作用:How to access a known Ember component from console(要么是因为我使用的 Ember 版本不支持公开该信息或者这是一个功能服务,而不是一个组件)。

我希望能够在原生 JavaScript、运行 开发工具中做到这一点,它可以移植到一个简单的小书签上,让其他人可以打开和打开功能标志在他们的机器上关闭。

最终,我想我正在尝试获取 Ember 应用程序的实例,以便执行与 Inspector 可能执行的操作类似的操作,但我需要的不是 $E.get('features')...EmberAppInstance.get('features')...。不过,我不知道如何获取该应用程序实例。

默认情况下,这是通过 ember-export-application-global 完成的。基本上它会在您的应用程序被调用时在全局调用下公开您的应用程序。

但是默认情况下不在生产版本中!但是,您可以通过在环境配置中设置 exportApplicationGlobal: true 来进行配置。

经过一些挖掘,我找到了一个解决方案,我很高兴在 Ember 2.13 中使用以下内容:

Ember.Application.NAMESPACES_BY_ID['app-name'].__container__.lookup('controller:application').get('features').enable('newHomePage');

我可以使用应用程序的名称(将 "app-name" 替换为您的应用程序名称)在命名空间数组中找到它,然后查找注入功能服务的应用程序控制器。从那里开始,所有 ember-feature-flags 方法都可用于 viewing/toggling 功能标志。有点麻烦,但没有任何新的 addons/dependencies 或 Ember Inspector 就可以解决问题。