可以使用聚合物可观察场进行Dart mixin?

时间:2014-08-31 23:02:07

标签: dart dart-polymer

所以我想说我有一个如此定义的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字段吗?或者,如果有办法手动导致绑定传递发生(不愿意)。

1 个答案:

答案 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应用需要此导入