2014-06-16 47 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'; 
}