簡體   English   中英

可以使用聚合物可觀察場進行Dart mixin?

[英]Dart mixin with a polymer observable field possible?

所以假設我有一個如下定義的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字段嗎? 或者,如果有辦法手動導致綁定傳遞發生(不希望)。

是的你可以。 我發現這種方式有效

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中引起的可能就是一個bug。

哦,不要忘記,盡量減少生成代碼的大小,如文檔所示,使用

import 'package:observe/mirrors_used.dart';

當使用帶注釋的東西時

@reflectable

雖然我不完全確定Polymer應用程序需要這個導入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM