Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember evented on错误:断言失败:在没有有效事件名称的情况下调用_Javascript_Ember.js_Dom Events_Ember.js 2 - Fatal编程技术网

Javascript Ember evented on错误:断言失败:在没有有效事件名称的情况下调用

Javascript Ember evented on错误:断言失败:在没有有效事件名称的情况下调用,javascript,ember.js,dom-events,ember.js-2,Javascript,Ember.js,Dom Events,Ember.js 2,我的ember 2.18应用程序中有一个控制器,我想让它监听应用程序中某个地方触发的某个事件myEventName,以更改模型属性 根据以下方法捕获发出的事件: import Evented from '@ember/object/evented'; import Controller from '@ember/controller'; // extend some object, like a Controller const myExtendedObject = Controller.ext

我的ember 2.18应用程序中有一个控制器,我想让它监听应用程序中某个地方触发的某个事件
myEventName
,以更改模型属性

根据以下方法捕获发出的事件:

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;
import { on } from '@ember/object/evented';

export default Controller.extend(Evented, {
  init() {
    this._super(...arguments);
    this.trigger('greet');
  },

  myGreetImplementation: on('greet', function() {
    console.log('hello');
  })
});
代码与ember build dev一起编译得很好, 但在浏览器的JS控制台中,我收到以下错误消息:

错误:断言失败:在没有有效事件名称的情况下调用错误。js:40

我尝试重命名事件,但找不到事件名称错误的原因。 我还尝试在方法上为
设置三个参数,但它仍然与事件名称有冲突。
我错过了什么

编辑:
我做了一个余烬旋转,显示事件的范围是组件。 我想在任何地方捕捉它们; 就像从服务触发事件并在路由中捕获它一样


您可以这样使用它:

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;
import { on } from '@ember/object/evented';

export default Controller.extend(Evented, {
  init() {
    this._super(...arguments);
    this.trigger('greet');
  },

  myGreetImplementation: on('greet', function() {
    console.log('hello');
  })
});
另一个示例:使用服务管理用户设置并订阅更改:

export default Service.extend(Evented, {
  ...
  changeProfilePicture() {
    ...
    this.trigger('profilePictureChanged', ... event parameters ...);
  }
});
然后,您可以在任何地方使用
on
方法观看此类事件:

 export default Controller.extend({
  userSettings: service(),

  init() {
    this._super(...arguments);
    this.get('userSettings').on('profilePictureChanged', this, this.profilePictureChanged);
  },

  profilePictureChanged(... event parameters ...) {
   ...
  }
});
您从这里得到的错误如下: (您只需在github搜索中粘贴错误消息,或使用调试器查找有关失败原因的更多信息)


更新:扩展您的旋转,使控制器在服务的事件上注册:

import Ember from 'ember';
import { inject as service } from '@ember/service';
import { on } from '@ember/object/evented';

export default Ember.Controller.extend({
  appName: 'Ember Twiddle',
  myService: service(),
  init() {
    this._super(...arguments);
    this.get('myService').on('mycall', this, this.mycallHandler);
  },
  mycallHandler: on('mycall', function() {
    console.log('here we are');
  })
});

谢谢你的例子。但是我没有找到一种方法使发出的事件在它们自己的服务/组件/控制器之外被捕获。这使得它不是很有用。在我的例子中,我有一个TransferService,当用户成功上传一些文件时,它会触发并激活“TimeToLoadFile”。但是侦听该事件的documentListController从未捕获它。不知道为什么。是的,事件绑定到一个Ember.Object(组件、控制器、服务等)。所以如果你需要一个全局事件总线,你可以有一个这样的服务,并在那里触发和注册事件。。。您可能希望签出:所有必要的:另一个文件只是注意您不必每次都注册此服务。