2016-04-18 29 views
0

進出口實現Ziggeo(http://ziggeo.com/),並Ziggeo有一個Javascript SDK,你訂閱這樣的活動訂閱全局JavaScript事件在灰燼JS

ZiggeoApi.Events.on("submitted", function (data) { 
    alert("Submitted a new video with token '" + data.video.token + "'!"); 
}); 

我管理,如果接收事件我像這樣在全球範圍內添加它:

<script> 
    ZiggeoApi.token = 'myToken'; 
    ZiggeoApi.Events.on("submitted", function (data) { 
    console.log('video updated: ' + data); 
    }); 
</script> 

但是我怎麼能聽Ember(控制器)中的全局事件?

我想這一點,並且它在某種程度上工作,除了「這」上下文不會是控制器,所以我不能調用其他燼組件,如商店,或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

我的解決方案將是:

  1. 覆蓋控制器的init功能
  2. 添加initZiggeo功能,綁定你的ziggeo事件
  3. 要在回調函數中使用store,您必須聲明另一個引用this的變量,我使用了var self = this;
  4. 如果您的回調將更新任何控制器或模型屬性,你將需要使用餘燼環路(更多關於run loop

你的控制器看起來就像這樣:

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; 

    }); 

    }); 
}