所以我想说我有一个如此定义的mixin类:
abstract class TestMix
{
@observable bool loggedIn = false;
updateLogin(){
if (isLoggedIn()){
loggedIn = true;
}else{
loggedIn = false;
}
}
}
我想将这种行为混合到一些聚合物视图中,所以我这样做:
@CustomTag('my-app')
class App extends PolymerElement with TestMix {
App.created() : super.created() {
this.updateLogin(); // @observable field 'loggedIn' is changed in the mixin
}
}
我没有任何有约束力的喜悦。如果我将mixin字段/方法直接移动到App类中,那么一切正常并且发生绑定。
只想确认这是否可行? Dart可以像本机字段一样反映mixin字段吗?或者,如果有办法手动导致绑定传递发生(不愿意)。
答案 0 :(得分:4)
是的,你可以。我发现这种方式有效
abstract class TestMix implements Observable
{
bool _loggedIn = false;
@reflectable bool get loggedIn => _loggedIn;
@reflectable set loggedIn(val) {
_loggedIn = notifyPropertyChange(#loggedIn, _loggedIn, val);
}
updateLogin(){
if (isLoggedIn()){
loggedIn = true;
}else{
loggedIn = false;
}
}
isLoggedIn() => true;
}
使用
@observable
mixin中的会导致真正的麻烦,它一直说mixin需要扩展Object,即使你这样做。所以我不得不看看源代码中的文档,并在上面的代码中遇到了这个建议,或类似的东西。查看observe / observe.dart下的观察包。虽然麻烦了
@observable
在mixin中引起的可能只是一个错误。
哦,不要忘记,按照文档的建议,尽量减少生成代码的大小,使用
import 'package:observe/mirrors_used.dart';
使用带注释的内容
@reflectable
虽然我并不完全确定Polymer应用需要此导入