【问题标题】:How to toggle Ember feature flags from the devtools console如何从 devtools 控制台切换 Ember 功能标志
【发布时间】:2018-09-25 13:24:59
【问题描述】:

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

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

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

但是,这在 devtools 控制台的“运行时”不起作用,因为this 上下文将引用 Window 对象。我不想依赖 Ember Inspector,[this existing question] 的答案对我不起作用:How to access a known Ember component from console(因为我使用的 Ember 版本没有公开该信息,或者这是一项功能服务,不是一个组件)。

我希望能够在本地 JavaScript 中执行此操作,在 devtools 中运行,可以将其移植到一个简单的书签中,以便其他人在他们的机器上打开和关闭功能标志。

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      默认情况下,这是使用ember-export-application-global 完成的。基本上,它会在调用您的应用时将您的应用暴露在全局调用之下。

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

      【讨论】:

      • 我不希望包含任何新的插件或依赖项。假设如果 Ember Inspector 可以在不包含该插件的应用程序中执行此操作似乎是合理的,那么必须有某种方法可以在不暴露全局的情况下获取对它的引用。我可以通过一些硬编码的引用来解决这个问题:Ember.Application.NAMESPACES[2].__container__.lookup('controller:application').get('features').isEnabled('newHomePage');。在我提出这个答案之前,我会继续修补。
      • 您可能已经拥有该插件。它是默认安装的。
      猜你喜欢
      • 2020-09-24
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2019-07-09
      • 1970-01-01
      相关资源
      最近更新 更多