Dart:@observable 的吸气剂
Dart: @observable of getters
我正在尝试了解 observable getter 在使用其他 class 实例属性时如何工作:
当我绑定隐式 getter/setter 对 'name' 时,它会在输入和 div 中更新并且一切都很好地同步。
但是显式 getter 'fullname' 未在 HTML 中更新。有没有办法让它工作(基本上元素绑定中的 'fullname' 也应该更新)?也许我遗漏了一个 setter,但是 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();
}
您需要通知 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。
对 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);
}
}
我正在尝试了解 observable getter 在使用其他 class 实例属性时如何工作:
当我绑定隐式 getter/setter 对 'name' 时,它会在输入和 div 中更新并且一切都很好地同步。
但是显式 getter 'fullname' 未在 HTML 中更新。有没有办法让它工作(基本上元素绑定中的 'fullname' 也应该更新)?也许我遗漏了一个 setter,但是 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();
}
您需要通知 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。
对 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);
}
}