我在我的ember 2.18应用程序中有一个控制器,我想让它监听应用程序中某处触发的某个事件myEventName
,以更改模型属性。
根据the API docs for this version,捕获发出事件的方法如下:
import Evented from '@ember/object/evented';
import Controller from '@ember/controller';
// extend some object, like a Controller
const myExtendedObject = Controller.extend(Evented, {
// stuff ...
});
myExtendedObject.on('myEventName', function (args) {
console.log("catch importDone ok", args);
});
export default myExtendedObject;
这段代码在ember build dev中编译得很好,但是在浏览器的JS控制台中,我收到了以下错误消息:
错误:Assert失败:在没有有效事件名称的情况下调用错误。js:40
我尝试重新命名事件,但找不到事件名称错误的原因。我也尝试设定on
方法的三个参数,但事件名称仍然有问题。我遗漏了什麽?
编辑:
我做了一个Ember旋转来显示事件的作用域是组件。比如从服务触发事件并在路由中捕获它。
https://ember-twiddle.com/ce22cc0a542e8e0997a1ad57a4a9688c?fullScreen=true
1条答案
按热度按时间ars1skjm1#
您可以像这样使用它:
再举一个例子:使用服务管理用户设置和订阅更改:
然后,您可以使用
on
方法在任何地方监视此类事件:您所得到的错误来自此处:https://github.com/emberjs/ember.js/blob/6fc89cdf13124d88b8ae6adf99bb02a8c0cdf508/packages/ember-metal/lib/events.ts#L211(您可以在github搜索中粘贴错误消息,或者使用调试器查找更多有关失败原因的信息)
更新:扩展您的旋转以使Controller在服务的事件上注册: