2017-04-26 85 views
1

我知道,我的問題是不是新的,但所有的解決方案,我在這裏和在網上查到不工作:(或者說,我做的事情完全錯誤聽JS自定義事件。在DART

我需要創建飛鏢和JS之間的溝通,我喜歡使用事件,這個想法似乎是整潔和簡單

所以,我想這個教程:https://dart.academy/easy-dart-js-interopt/

我的JS代碼:

var customEvent = new CustomEvent("fromJavascriptToDart"); 
window.onload = document.dispatchEvent(customEvent); 
document.addEventListener("fromJavascriptToDart", test, false); 
function test() { 
    console.log("Listening"); 
} 

調度事件,因爲我在控制檯日誌中看到Listening。

但是,當涉及到飛鏢,沒有任何工作。

我嘗試以下方法,一切都失敗:

document.on['fromJavascriptToDart'].listen((CustomEvent event) { 
        print("HEY! I'M LISTENING!"); 
       }); 
window.on["fromJavascriptToDart"].listen((e) => print("HEY! I'M LISTENING!")); 
window.on['foo'].add((e) => print(e.detail)); //This is not working, as there is no add method in Stream Event anymore 
@Listen('fromJavascriptToDart') 
    void eventTest(){ 
     print("HEY! I'M LISTENING!"); 
    } 

任何幫助主要是讚賞。

+0

'document.on [ 'fromJavascriptToDart']聽((CustomEvent的事件){ 打印( 「嘿,我聽!」); });'工作正常。 https://dartpad.dartlang.org/9cc2ecbe7a0b6479c56de882566982c9 最後一個例子看起來像聚合物。 –

+0

其實,我沒有看到飛鏢的任何日誌。我沒有看到「嘿,我聽到了!」是否有可能,我從錯誤的地方聽它?我有一個應用程序類,開始與應用程序初始化。在那裏我添加了這些聽衆。 –

+1

哦,停下來。一切都在工作。你的答案工作起來很神奇,我看到很多「嘿!我聆聽!」在控制檯中。儘管如此,我還是爲此掙扎了幾個小時。你會介意加入這個答案嗎,所以我可以標記是一個解決方案? –

回答

2

DartPad example

document.on['fromJavascriptToDart'].listen((CustomEvent event) { 
    print("HEY! I'M LISTENING!"); 
}); 

工作正常。

  • @Listen()是聚合物特定
  • add不存在(listen如上圖應使用)
  • 事件似乎並沒有達到window,但我敢肯定,這將具有相同的行爲在純JS中。