2013-03-30 2 views
9

Ich habe Klasse wie folgt:dart, wie man ein benutzerdefiniertes Ereignis erstellt, hört und ausgibt?

class BaseModel { 
    Map objects; 

    // define constructor here 

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

} 

Wie backbonejs ich ein change Ereignis emittiert werden soll, wenn ich fetch anrufen und einen Hörer für change Ereignis auf meiner Ansicht erstellen.

Aber vom Lesen der Dokumentation weiß ich nicht, wo ich anfangen soll, da es so viele gibt, die auf ein Ereignis zeigen, wie EventEventsEventSource und so weiter.

Können Sie mir einen Tipp geben?

Antwort

14

Ich gehe davon aus, dass Sie Ereignisse ausgeben möchten, die keine dart:html Bibliothek erfordern.

Sie können die Streams-API verwenden, um einen Stream von Ereignissen anzuzeigen, auf den andere achten und damit umgehen können. Hier ein Beispiel:

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; 

} 

Dann über in Ihrer App:

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

Verwendung der nativen Streams API schön ist, weil es bedeutet, dass Sie nicht den Browser benötigen, um Ihre Anwendung zu testen.

Wenn Sie verpflichtet sind, eine benutzerdefinierte HTML-Ereignis zu emittieren, können Sie diese Antwort sehen: https://stackoverflow.com/a/13902121/123471

+0

1) fetchDoneController mir ‚endgültig‘ scheint aber noch wichtiger 2) sagen, dass ich jede auf * * abonnieren möchten Ereignis holen mit dem klassischen Schema, wo der Absender durch e.sender oder dergleichen identifiziert wird. Ich könnte das in Dart machen? Ich denke mit einem statischen StreamController, aber ich greife auf den statischen Stream zu? Ich würde mich freuen, wenn Sie ein Beispiel für einen solchen Fall geben würden (oder ich könnte eine Frage zu SO stellen ...). – GameAlchemist