2013-03-30 47 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