[英]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.