【问题标题】:Dart mixin with a polymer observable field possible?带有聚合物可观察场的 Dart mixin 可能吗?
【发布时间】:2014-08-31 23:02:07
【问题描述】:

假设我有一个这样定义的 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 字段吗?或者,如果有办法手动导致绑定传递发生(不希望)。

【问题讨论】:

  • 这应该可以,你能提交一个错误吗?你也可以尝试在 TestMix 上实现 Observable。

标签: dart dart-polymer


【解决方案1】:

是的,你可以。我发现这种方法有效

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 下的observe 包。虽然麻烦

@observable

在 mixin 中引起的可能只是一个错误。

别忘了,按照文档的建议,要最小化生成代码的大小,请使用

import 'package:observe/mirrors_used.dart';

当使用带有

注释的东西时
@reflectable

虽然我不完全确定 Polymer 应用需要此导入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多