Dart:@observable of getters

时间:2015-02-05 13:45:52

标签: dart dart-polymer

我试图了解可观察的getter在使用其他类实例属性时是如何工作的:

当我绑定隐含的getter / setter对时,名称'它在输入和div中更新,一切都很好地同步。

然而,明确的getter'全名'没有在HTML中更新。有没有办法使这项工作(基本上元素绑定中的'全名'也应该更新)?也许我错过了一个二传手,但是再次setter在这里没有意义......

非常简单的示例:

测试element.html

<link rel="import" href="../../packages/polymer/polymer.html">
<polymer-element name="test-element">
  <template>
    <input value="{{ds.name}}">
    <div>{{ds.name}}</div>
    <div>{{ds.fullname}}</div>
  </template>
  <script type="application/dart" src="test1.dart"></script>
</polymer-element>

测试element.dart

import 'package:polymer/polymer.dart';
import 'package:popoli/sysmaster-settings.dart';

@CustomTag('test-element')
class TestElement extends PolymerElement {
  @observable VerySimpleTest ds;

  TestElement.created() : super.created() {
    ds = new VerySimpleTest()..name = 'Peter';
  }
}

ds.dart

class VerySimpleTest extends Observable {
  @observable String name = '';
  @observable String get fullname => 'Test: $name';
  VerySimpleTest() : super();
}

2 个答案:

答案 0 :(得分:3)

您需要通知Polymer,getter依赖的值已更改。

String set name(String val) {
  name = notifyPropertyChange(#fullname, name, val);
}

或者这也应该起作用

@ComputedProperty('Test: $name') String get fullname => 'Test: $name';

有关详细信息,请参阅http://japhr.blogspot.co.at/2014/08/the-polymerdart-computedproperty.html

答案 1 :(得分:1)

对Günter提案的一些小修改使它对我有用:

class VerySimpleTest extends Observable {
    String _name = '';
    //  @observable  // apparently, not even required
    String get name => _name;
    //  @observable  // apparently, not even required
    String get fullname => 'Test: $name';

    set name(String val) {
        String oldVal = _name;
        _name = notifyPropertyChange(#name, oldVal, val);
        _name = notifyPropertyChange(#fullname, oldVal, val);
    }
}