2013-03-30 17 views
9

Böyle sınıf var:dart, özel etkinlik nasıl oluşturulur, dinlenir ve yayar?

class BaseModel { 
    Map objects; 

    // define constructor here 

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

} 

backbonejs gibi ben fetch arayıp benim görünümünde change olayı için bir dinleyici oluşturduğunuzda change olayı yayar istiyorum.

Ancak belgeleri okuyarak, nereden başlayacağımı bilmiyorum çünkü bu kadar çok olay var, EventEventsEventSource vb.

Bana bir ipucu verebilir misiniz?

cevap

14

dart:html kitaplığının bulunmasını gerektirmeyen olayları yayınlamak istediğiniz varsayılıyor.

Başkalarının dinlemesi ve işlenmesi için bir olay akışını ortaya çıkarmak için Akışlar API'sini kullanabilirsiniz. boyunca uygulamanıza Sonra

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; 

} 

: İşte bir örnek Başvurunuzu test etmek için tarayıcıyı gerek olmadığı anlamına gelir çünkü API güzel yerli akımlarını kullanarak

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

. Eğer özel bir HTML olayı yayarlar gerekiyorsa

, bu cevabı görebilirsiniz: fetchDoneController bana 'nihai' görünüyor ama) https://stackoverflow.com/a/13902121/123471

+0

1 2) i * herhangi * olayı getirme abone olmak istediğini söylüyorsun daha önemli Gönderenin e.sender veya benzeri tarafından tanımlandığı klasik şema ile. Bunu Dart'ta yapabilir miyim? Statik bir StreamController ile tahmin ediyorum, ama statik akışa erişirim? Böyle bir durum için bir örnek verdiyseniz (veya SO ile ilgili bir soru sorabilirmiysem) memnun olurum. – GameAlchemist