2013-03-30 20 views
9

tôi có lớp học như thế này:phi tiêu cách tạo, nghe và phát ra sự kiện tùy chỉnh?

class BaseModel { 
    Map objects; 

    // define constructor here 

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

} 

Giống như backbonejs tôi muốn phát ra một sự kiện change khi tôi gọi fetch và tạo ra một người biết lắng nghe cho change sự kiện trên quan điểm của tôi.

Nhưng từ việc đọc tài liệu, tôi không biết bắt đầu từ đâu vì có quá nhiều điểm đến sự kiện, như EventEventsEventSource v.v.

Các bạn có thể gợi ý cho tôi không?

Trả lời

14

Tôi giả sử bạn muốn phát ra các sự kiện không yêu cầu sự hiện diện của thư viện dart:html.

Bạn có thể sử dụng API luồng để hiển thị luồng sự kiện để những người khác nghe và xử lý. Dưới đây là một ví dụ:

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; 

} 

Sau đó, qua trong ứng dụng của bạn:

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

Sử dụng Streams bản địa API là tốt đẹp vì nó có nghĩa là bạn không cần trình duyệt để kiểm tra ứng dụng của bạn.

Nếu bạn được yêu cầu phải phát ra một sự kiện HTML tùy chỉnh, bạn có thể xem câu trả lời này: https://stackoverflow.com/a/13902121/123471

+0

1) fetchDoneController dường như 'chính thức' với tôi nhưng quan trọng hơn 2) nói rằng tôi muốn đăng ký vào bất kỳ * * lấy sự kiện với lược đồ cổ điển, nơi người gửi được xác định bằng e.sender hoặc thích. Tôi có thể làm điều đó ở Dart không? tôi đoán với một StreamController tĩnh, nhưng tôi làm tôi truy cập vào dòng tĩnh? Tôi sẽ vui mừng nếu bạn cung cấp một ví dụ cho trường hợp như vậy (hoặc tôi có thể đặt một câu hỏi trên SO ...). – GameAlchemist

Các vấn đề liên quan