2013-03-11 14 views
5

Tôi không thể tìm ra cách sử dụng chú thích @observable/Observable class để nhận thông báo đơn giản khi trạng thái của một đối tượng thay đổi.Cách sử dụng Google Dart web-ui @observable độc ​​lập?

import 'package:web_ui/observe.dart'; 

@observable class T{ 
    String x; 
// what else is needed? 
} 

T t = new T(); 
observe(t, (e) => print ("Value changed")); 
t.x = "Changed"; 

Tôi muốn sử dụng các quan sát không có phần còn lại của web-ui nếu có thể (thay thế cho backbone.js).

Trả lời

2

Bạn sẽ cần chạy trình biên dịch dwc, tìm kiếm @observable và tạo mã nguồn mới thực sự thực hiện việc quan sát. Tôi chưa bao giờ cố gắng chạy các quan sát mà không có giao diện người dùng web, nhưng chắc chắn bạn sẽ cần dwc để tạo ra kết quả chính xác.

0

Tôi chỉ dành chút thời gian để cố gắng làm điều tương tự. Như đã nêu trong câu trả lời ở trên, bạn không thể sử dụng chú thích @observable mà không có WebUI/Polymer. Tuy nhiên, bạn có thể sử dụng gói quan sát được. Dưới đây là ví dụ nhanh:

import 'package:observe/observe.dart'; 

void main() { 
    var person = new Person(18, false); 

    person.changes.listen((List<ChangeRecord> changes) { 
    changes.forEach((PropertyChangeRecord change) { 
     print("$change"); 
    }); 
    }); 

    person.changes.listen((List<ChangeRecord> changes) { 
    changes.where((PropertyChangeRecord c) => c.name == #employed).forEach((PropertyChangeRecord change) { 
     print("Employment status changed!"); 
    }); 
    }); 

    print("start changing"); 

    person.age = 19; 
    person.age = 19; 
    person.age = 19; 
    person.age = 20; 
    person.employed = true; 
    person.age = 21; 
    person.age = 22; 

    print("finish changing"); 
} 

class Person extends ChangeNotifier { 

    int _age; 
    int get age => _age; 
    void set age (int val) { 
    _age = notifyPropertyChange(#age, _age, val); 
    } 

    bool _employed; 
    bool get employed => _employed; 
    void set employed (bool val) { 
    _employed = notifyPropertyChange(#employed, _employed, val); 
    } 

    Person(this._age, this._employed); 
} 

Sự kiện không đồng bộ nên cẩn thận nếu bạn dựa vào thứ tự của những sự kiện này. Kết quả của chương trình trên là

start changing 
finish changing 
#<PropertyChangeRecord Symbol("age") from: 18 to: 19> 
#<PropertyChangeRecord Symbol("age") from: 19 to: 20> 
#<PropertyChangeRecord Symbol("employed") from: false to: true> 
#<PropertyChangeRecord Symbol("age") from: 20 to: 21> 
#<PropertyChangeRecord Symbol("age") from: 21 to: 22> 
Employment status changed!