2014-03-29 48 views
1

我試圖將我的項目一步一步地轉換爲飛鏢。我已經將一個獨立的庫轉換爲Dart,並在我的項目中使用了Dart編譯的JavaScript。感謝您在my other question的幫助。我可以調用Dart編譯的javascript函數。現在我面臨另一個難題。如果我的Dart函數需要回調函數,那麼如何將JavaScript函數傳遞給Dart生成的javascript函數?當從javascript調用dart complied Javascript時,如何將回調函數傳入到dart編譯的Javascript中?

我所試圖做的是從Javascript註冊飛鏢事件處理程序,例如:

在我的飛鏢

,我有事件總線,鏢對象可以將事件處理程序來註冊通過:

bus.on('eventName', callbackFunc); 

和飛鏢對象通過觸發一個事件:

bus.fire('evnetName', data); 

我揭露總線爲Javascript的世界,通過:

js.context['registerEvent'] = bus.on; 

在Javascript中,我想打電話給

registerEvent('someEvent', function() { console.log('JS callback' }); 

註冊一個事件處理程序,當飛鏢對象觸發的事件時,JS回調將被調用。

回答

2

你可以嘗試只是把它作爲一個參數,省道與param.apply([])

+0

param.apply()不工作。 未捕獲的NoSuchMethodError:不能調用 「#」 「申請$ 0」(對象#有沒有方法 '申請$ 0') – kzhdev

+0

嘗試'param.apply([])' –

+1

這工作。謝謝你的幫助。 – kzhdev

1

從您剛纔的問題稱呼它,

js.context["sayGreeting"] = (message) { 
    print("greeting: $message"); 
}; 

// pass js function which is already defined above. 
someJsObject.callMethod('someOriginalJsFunction', [js.context['sayGreeting']]); 
+0

我在我的問題中添加了更多信息。你的方法不起作用,因爲1. dart不知道回調函數的名字。 2.可能根本沒有函數名,例如問題中的內聯函數。 – kzhdev

相關問題