2016-04-18 14 views
0

イム(http://ziggeo.com/)のグローバルJavaScriptのイベントを購読し、Ziggeoはあなたが私が私場合は、イベントを受け取るために管理し、このは、私たちのエンバーJSアプリケーションでZiggeoを実装エンバーJS

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

などのイベントをサブスクライブのJavascript SDKを持っていますこのようにJSでグローバルにそれを追加します。

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

しかし、どのように私は、エンバーの世界的なイベント(コントローラ)を聞くことができますか?

など、

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; 
    ... 
を私はこれを試みたが、それは何らかの形で働いていた、その以外の「これ」コンテキストは、コントローラではありませんので、私は店のように、他の燃えさしのコンポーネントを呼び出すカント、またはstore.createRecord

答えて

0

私のソリューションは次のようになります。

  1. 上書きコントローラのinit機能
  2. あなたziggeoイベントをバインドするために、initZiggeo機能を追加
  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; 

    }); 

    }); 
} 
関連する問題