Ember CLI Hook/Event 错误

Ember CLI Hook/Event Error

我正在使用 Ember CLI 1.13,我正在尝试在绑定到 willTransition 挂钩的插件中创建路由器混合,但我遇到的问题不限于此到这个事件。

此时 mixin 看起来像这样:

import Ember from 'ember';

export default Ember.Mixin.create({
    genericFunction: function(transition) {
        console.log('--- generic function ---');
    }.on('willTransition')
});

当尝试 运行 使用 mixin 的虚拟应用程序时,出现以下错误:

Uncaught TypeError: (intermediate value)(intermediate value)(intermediate value).on is not a function

在单独的应用程序中包含和使用插件时,没有错误,一切都按预期运行。没有警告、错误和任何其他提示在完整应用程序中使用它的任何问题。

虚拟应用程序和单独应用程序的环境配置相同,因此我排除了环境配置的潜在问题。

我不确定这是否只是 Ember 中的功能损坏,或者我是否需要采取一些额外的步骤来使虚拟应用程序在使用时按照您的预期运行hooks/events.

如有任何帮助,我们将不胜感激。

谢谢!

所以经过几个小时的挖掘,结果证明解决这个问题的方法是从插件的 package.json 文件中删除包 ember-disable-prototype-extensions

此依赖项会禁用您的插件(或应用程序)中的原型,并且默认包含在任何新生成的 Ember 插件中,以鼓励开发人员不要依赖其插件的原型,以防消费应用程序禁用原型.

插件在应用程序中使用时正常工作的原因是 Ember 个应用程序具有 prototypes enabled by default,因此启用它们没有理由失败。

另一种(更好的)解决方案是禁用原型扩展并使用非原型变体。这样,您就不会强制应用程序使用不希望使用的原型扩展。

import Ember from 'ember';

const {
  Mixin,
  on
} = Ember;

export default Mixin.create({
  genericFunction: on('willTransition', function(transition) {
    console.log('--- generic function ---');
  })
});