2013-03-30 8 views
9

私はこのようなクラスがあります:私はfetchを呼び出すときchangeイベントを放出し、私の見解でchangeイベントのリスナーを作成したいbackbonejs同様ダーツカスタムイベントの作成、聴取、および発行方法

class BaseModel { 
    Map objects; 

    // define constructor here 

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

} 

を。

しかし、ドキュメントを読んでから、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; 

} 

次に、以上のアプリ内:それはあなたがあなたのアプリケーションをテストするために、ブラウザが必要ないことを意味しますので、ネイティブのストリームAPIを使用して

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

がいいです。カスタムHTMLイベントを放出する必要がある場合

、あなたがこの回答見ることができます:fetchDoneControllerは私に「最終」をようだが)https://stackoverflow.com/a/13902121/123471

+0

1の2)私は*すべての*イベントを取得するためにサブスクライブしたいと言う方が重要送信者がe.senderなどで識別される古典的なスキームを使用します。私はダーツでそれをすることができますか?私は静的なStreamControllerと思いますが、私は静的ストリームにアクセスしますか?あなたがそのような場合の例を提供してくれれば嬉しいです(または私はSO ...に関する質問をするかもしれません)。 – GameAlchemist

関連する問題