2014-09-29 94 views
1

我想从一个对象中检测属性更改,然后将该值(或重新计算该值并将结果传递给另一个对象的属性)进行检测。我看到的例子来自这表明值转发的文件:在Dart中将一个可观察属性从一个对象转发到另一个对象

class MyModel extends Observable { 
    StreamSubscription _sub; 
    MyOtherModel _otherModel; 

    MyModel() { 
    ... 
    _sub = onPropertyChange(_otherModel, #value, 
     () => notifyPropertyChange(#prop, oldValue, newValue); 
    } 

    String get prop => _otherModel.value; 
    set prop(String value) { _otherModel.value = value; } 
} 

但我不知道从哪里得到的属性oldValue和NEWVALUE。 我想这些应该作为参数传递给onPropertyChange(第三个参数)的回调,但事实并非如此。回调没有提供参数。这是一个疏忽还是我错过了什么?

+0

是'MyOtherModel'也观察到的? – 2014-09-29 09:53:47

+0

那么,这个例子是onPropertyChange Dart文档的精确副本,并且没有关于此的说明。但是,就我而言,是的,它是可观察的。 – 2014-09-29 10:02:03

回答

0
import 'dart:async'; 
import 'package:observe/observe.dart'; 
class MyOtherModel extends Object with Observable { 
    @observable 
    String value; 
} 

class MyModel extends Object with Observable { 
    StreamSubscription _sub; 
    MyOtherModel _otherModel = new MyOtherModel(); 

    MyModel() { 

    ///... 
    _otherModel.changes.listen((crs) { 
     crs.forEach((PropertyChangeRecord cr) => 
      notifyPropertyChange(#prop, cr.oldValue, cr.newValue)); 
    }); 
    } 

    String get prop => _otherModel.value; 
    set prop(String value) => _otherModel.value = value; 
} 

void main() { 
    MyModel m = new MyModel(); 
    m.prop = 'bla'; 
    m.changes.listen(print); 
    // initiate change notification 
    Observable.dirtyCheck(); 
} 

输出

[#<PropertyChangeRecord Symbol("value") from: null to: bla>] 
+0

如果我错了,请纠正我,但我认为代码中的notifyChange方法会将错误的更改记录发送到当前对象m。我想它应该是这样的: '_otherModel.changes.listen((crs){(cr)=> notifyChange(new PropertyChangeRecord(this,#prop,cr.oldValue,cr.newValue)) ); });'' – 2014-09-29 11:23:17

+0

我想要的是,当_otherModel.value更改时,它的新值将作为新值自动发送给m.prop,所以绑定到m.prop以便通知更改 – 2014-09-29 11:29:05

+0

我更新了代码。 – 2014-09-29 11:41:28

相关问题