Ember CLI挂钩/事件错误

时间:2015-08-17 01:02:28

标签: javascript ember.js hook ember-cli mixins

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

此时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中的功能被破坏,或者我是否需要采取一些额外的步骤来使虚拟应用程序按照您在使用挂钩/事件时的预期行为。

非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

import Ember from 'ember';

const {
  Mixin,
  on
} = Ember;

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

答案 1 :(得分:0)

因此,经过几个小时的挖掘后发现,解决此问题的方法是从您的插件的package.json文件中删除包ember-disable-prototype-extensions

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

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