2014-06-16 46 views
1

我在HTML文件中有兩個錶行。當第一行被點擊時,它通過classes.add(「active_style」)更改其樣式。如果第二行被點擊,我想清除第一行樣式。Dart語言:可觀察

我知道我可以只寫...

querySelector("#first_row_div").classes.clear();

...爲了清除第一行類(然後復位它的風格),但在一個更大的代碼,我認爲,觀察到的會是最合適的。

我不知道這是否可觀察。但是,如果是這樣,我該怎麼做?

編輯/更新:我認爲正確的問題是「有什麼方法可以在變量發生變化時運行函數嗎?」。

感謝您的幫助!

+0

我不知道你觀察到的是什麼意思。在Polymer中,您可以將元素的類屬性綁定到元素類中的字段,並且可以在HTML標記中聲明綁定。當值更改時,所有綁定屬性會自動更新。你的用例非常簡單,我不確定這是否值得使用這種技術。如果你使用聚合物,那麼它是一個不同的情況。 –

+0

@GünterZöchbauer你是對的。這很混亂。我已經更新了這個問題。 – Felipe

+0

我更新了我的答案。 –

回答

0

你可以爲一個字段設置一個getter/setter並在setter中運行你的函數。

class MyClass { 

    String _cssClass; 
    String get cssClass => _cssClass; 
    set cssClass(String newClass) { 
    _cssClass = newClass; 
    updateDom(); 
    } 

    void updateDom() { 
    // do important work here 
    } 
} 

您可以使用擴展Observable模型類。 在這裏您必須致電dirtyCheck()以使Observable檢查更改並通知監聽者。

Dart還提供了ChangeNotifier mixin。在這裏你不需要調用任何髒檢查方法。當更改進行偵聽器調用時。

一個簡單的例子,我寫了前段時間在檢查功能

import 'package:observe/observe.dart'; 

class Notifiable extends Object with ChangeNotifier { 
    String _input = ''; 

    @reflectable 
    get input => _input; 

    @reflectable 
    set input(val) { 
    _input = notifyPropertyChange(#input, _input, val + " new"); 
    } 

    Notifiable() { 
    this.changes.listen((List<ChangeRecord> record) => record.forEach(print)); 
    } 
} 

class MyObservable extends Observable { 
    @observable 
    String counter = ''; 

    MyObservable() { 
    this.changes.listen((List<ChangeRecord> record) => record.forEach(print)); 
    } 
} 

void main() { 
    var x = new MyObservable(); 
    x.counter = "hallo"; 
    Observable.dirtyCheck(); 

    Notifiable notifiable = new Notifiable(); 
    notifiable.input = 'xxx'; 
    notifiable.input = 'yyy'; 
}