2013-10-04 26 views
6

最近まで、以下に示すようにbindPropertyを使用するか、this questionのように使用できましたが、これは0.8.0で変更されています。 doSomethingの()が呼び出されます):観測可能なフィールドの変更にサブスクライブする方法

<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(モデル、#isLoggedIn、()=>のdoSomething());

} 
} 

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

答えて

6

、あなたもこの便利なフォームを使用することができます:あなたはyourFieldNameの名前を使用して、あなたのPolymerElement内部メソッドを作成する方法

isLoggedInChanged(oldValue) { 
    doSomething(); 
} 

お知らせ*変更された

ここに定義されているonPropertyChangeもあります。http://api.dartlang.org/docs/bleeding_edge/observe.html#onPropertyChange

ドキュメントから

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

又は

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

Polymer.dart < 1.0.0

[OK]を、それを見つけました

Polymer.dart 0.8以上で
new PathObserver(model, "isLoggedIn").changes.listen((e) => doSomething()); 
1

構文は少し変わっているようです。 ギュンターによって提案された解決策の構文は今のようだ:

new PathObserver(model, "isLoggedIn").open((e) => doSomething()); 
関連する問題