2013-03-30 80 views
9

我上課是這樣的:dart如何創建,聆聽併發出自定義事件?

class BaseModel { 
    Map objects; 

    // define constructor here 

    fetch() { 
    // fetch json from server and then load it to objects 
    // emits an event here 
    } 

} 

backbonejs我想,當我打電話fetch和對我的看法change事件創建一個監聽器發出change事件。

但是從閱讀文檔,我不知道從哪裏開始,因爲有這麼多,點事件,像EventEventsEventSource等。

你們可以給我一個提示嗎?

回答

14

我假設你想發出不需要存在dart:html庫的事件。

您可以使用Streams API來公開事件流供其他人監聽和處理。這裏有一個例子:

import 'dart:async'; 

class BaseModel { 
    Map objects; 
    StreamController fetchDoneController = new StreamController.broadcast(); 

    // define constructor here 

    fetch() { 
    // fetch json from server and then load it to objects 
    // emits an event here 
    fetchDoneController.add("all done"); // send an arbitrary event 
    } 

    Stream get fetchDone => fetchDoneController.stream; 

} 

然後,在你的應用程序:

main() { 
    var model = new BaseModel(); 
    model.fetchDone.listen((_) => doCoolStuff(model)); 
} 

使用原生API數據流是很好的,因爲這意味着你不需要瀏覽器,以測試你的應用。

如果您需要發出一個自定義的HTML事件,你可以看到這樣的回答:https://stackoverflow.com/a/13902121/123471

+0

1)fetchDoneController似乎「最終」給我,但更重要的2)說我要訂閱*任何*獲取事件與發件人由e.sender或類似標識的經典方案。我可以在Dart做到這一點嗎?我想用一個靜態StreamController,但我做我訪問靜態流?如果你爲這種情況提供了一個例子(或者我可能會問一個關於SO的問題),我會很高興你。 – GameAlchemist