我在我们的Ember JS应用程序中实现了Ziggeo(http://ziggeo.com/),并且Ziggeo有一个Javascript SDK,您可以订阅这样的事件
ZiggeoApi.Events.on("submitted", function (data) {
alert("Submitted a new video with token '" + data.video.token + "'!");
});
如果我在JS中全局添加它,我设法收到该事件:
<script>
ZiggeoApi.token = 'myToken';
ZiggeoApi.Events.on("submitted", function (data) {
console.log('video updated: ' + data);
});
</script>
但是我如何在Ember(控制器)中听全局事件?
我尝试了这个,它以某种方式工作,除了“this”上下文不是控制器,所以我不能调用其他的ember组件,如store,或者store.createRecord等。
export default Ember.Controller.extend(Ember.Evented, {
session: Ember.inject.service('session'),
ziggeoRecordDone: ZiggeoApi.Events.on("submitted", (function(data) {
console.log("Ziggeo Record Done YEAH; HURRA");
ZiggeoApi.videoOnLoad = data.video.token;
...
答案 0 :(得分:0)
我的解决方案是:
init
功能initZiggeo
功能,以绑定您的ziggeo事件store
,您必须声明另一个引用this
的变量,我使用了var self = this;
。您的控制器将如下所示:
export default Ember.Controller.extend(Ember.Evented, {
session: Ember.inject.service('session'),
//Initializing controller
init:function(){
this._super();
this.initZiggeo();
},
initZiggeo:function(){
var self = this;
ZiggeoApi.Events.on("submitted", function(data) {
//If you want your events update the ember code
Ember.run.once(self,function(){
console.log("Ziggeo Record Done YEAH; HURRA");
ZiggeoApi.videoOnLoad = data.video.token;
});
});
}