2013-10-04 11 views
6

do niedawna mogłem używać bindProperty jak pokazano poniżej lub w this question, ale to zmieniło się z 0.8.0 i nie wiem jak zmienić mój kod, aby uzyskać stare zachowanie (doSomething() jest wywoływana):Jak zasubskrybować zmianę obserwowalnego pola

<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 (model #isLoggedIn() => doSomething());

} 
} 

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

Odpowiedz

6

Z Polymer.dart 0,8 lub większy, można również korzystać z tej formy Wygoda:

isLoggedInChanged(oldValue) { 
    doSomething(); 
} 

Wskazówki, jak można utworzyć metodę wewnątrz PolymerElement który używa nazwy yourFieldName * Zmieniono

jest też onPropertyChange jak zdefiniowano tutaj: http://api.dartlang.org/docs/bleeding_edge/observe.html#onPropertyChange

Od docs:

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) => ... 

lub

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

Polymer.dart < 1.0.0

Ok, okazało się, że

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

Wydaje się, że składnia zmieniła trochę. Składnia rozwiązania zaproponowanego przez Günter teraz wydaje się być:

new PathObserver(model, "isLoggedIn").open((e) => doSomething()); 
Powiązane problemy