2013-10-04 25 views
6

cho đến gần đây tôi có thể sử dụng bindProperty như được hiển thị bên dưới hoặc trong this question, nhưng điều đó đã thay đổi với 0.8.0 và tôi không biết cách thay đổi mã của mình để có hành vi cũ (doSomething() được gọi):Cách đăng ký thay đổi trường quan sát

<polymer-element name="my-login" attributes="model"> 
    <template> 
    <template if="{{"model.isLoggedIn}}"> 
     ... 
    </template> 
    </template> 
    <script type= ... ></script> 
</polymer-element> 

.

@CustomTag("my-login") 
class MyLogin extends PolymerElement with ObservableMixin { 
    LoginModel model; 

    @override 
    inserted() { 

    void doSomething() { 
    ... 
    } 

logoutChangeSubscription = bindProperty (mô hình, #isLoggedIn,() => doSomething());

} 
} 

class Model extends Object with ObservableMixin { 
    @observable bool isLoggedIn = false; 
} 

Trả lời

6

Với Polymer.dart 0.8 hoặc cao hơn, bạn cũng có thể sử dụng hình thức sự tiện lợi này:

isLoggedInChanged(oldValue) { 
    doSomething(); 
} 

Chú ý làm thế nào bạn có thể tạo ra một phương pháp bên PolymerElement của bạn có sử dụng một tên yourFieldName * Thay đổi

Ngoài ra còn có onPropertyChange như đã định nghĩa ở đây: http://api.dartlang.org/docs/bleeding_edge/observe.html#onPropertyChange

Từ tài liệu:

class MyModel extends ObservableBase { 
    StreamSubscription _sub; 
    MyOtherModel _otherModel; 

    MyModel() { 
    ... 
    _sub = onPropertyChange(_otherModel, const Symbol('value'), 
     () => notifyProperty(this, const Symbol('prop')); 
    } 

    String get prop => _otherModel.value; 
    set prop(String value) { _otherModel.value = value; } 
} 
5

Polymer.dart> = 1.0.0

@Property(observer: 'doSomething') bool isLoggedIn; 

@reflectable 
void doSomething(bool newValue, bool oldValue) => ... 

hoặc

@Observe('isLoggedIn') 
void doSomething(event, detail) => ... 

Polymer.dart < 1.0.0

Ok, tìm thấy nó

new PathObserver(model, "isLoggedIn").changes.listen((e) => doSomething()); 
1

Dường như cú pháp đã thay đổi một chút. Cú pháp của giải pháp được Günter đề xuất hiện có vẻ là:

new PathObserver(model, "isLoggedIn").open((e) => doSomething()); 
Các vấn đề liên quan