2014-08-31 50 views
4

所以可以說我有像這樣定義的混合類:Dart 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

這應該工作,你可以提交一個錯誤?你也可以嘗試在TestMix上實現Observable。 – 2014-08-31 23:12:29

回答

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 
中混入

導致它口口聲聲說混入需要擴展對象真正的麻煩,即使你做的。所以我不得不看看源代碼中的文檔,並在上面的代碼中找到了這個建議,或者類似的東西。在觀察/觀察下查看觀察包。雖然麻煩

@observable 

在mixin中引起的可能只是一個錯誤。

哦,不要忘記,以減少生成的代碼的大小,用文檔的建議,使用

import 'package:observe/mirrors_used.dart'; 

使用事情

@reflectable 

雖然我當註釋不完全確定聚合物應用程序需要此導入

+0

這是訣竅。謝謝。 – 2015-12-16 09:49:58