直到最近我可以使用bindProperty,如下所示或在这个问题中,但是已经改变了0.8.0并且我不知道如何更改我的代码以获得旧的行为(doSomething()被调用):
<polymer-element name="my-login" attributes="model">
<template>
<template if="{{"model.isLoggedIn}}">
...
</template>
</template>
<script type= ... ></script>
</polymer-element>
Run Code Online (Sandbox Code Playgroud)
.
@CustomTag("my-login")
class MyLogin extends PolymerElement with ObservableMixin {
LoginModel model;
@override
inserted() {
void doSomething() {
...
}
Run Code Online (Sandbox Code Playgroud)
logoutChangeSubscription = bindProperty(model,#isggedIn,()=> doSomething());
}
}
class Model extends Object with ObservableMixin {
@observable bool isLoggedIn = false;
}
Run Code Online (Sandbox Code Playgroud)
使用Polymer.dart 0.8或更高版本,您还可以使用以下便利形式:
isLoggedInChanged(oldValue) {
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
请注意如何在PolymerElement中创建一个使用yourFieldName*Changed 名称的方法
这里也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; }
}
Run Code Online (Sandbox Code Playgroud)
Polymer.dart> = 1.0.0
@Property(observer: 'doSomething') bool isLoggedIn;
@reflectable
void doSomething(bool newValue, bool oldValue) => ...
Run Code Online (Sandbox Code Playgroud)
要么
@Observe('isLoggedIn')
void doSomething(event, detail) => ...
Run Code Online (Sandbox Code Playgroud)
Polymer.dart <1.0.0
好的,找到了
new PathObserver(model, "isLoggedIn").changes.listen((e) => doSomething());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |