dart语言中如何观察简单变量
Posted
技术标签:
【中文标题】dart语言中如何观察简单变量【英文标题】:How to observe simple variable in dart language 【发布时间】:2013-09-03 06:21:57 【问题描述】:我的问题是:如何观察 String 或 num 等简单变量的变化? 我知道你可以像这样轻松观察物体:
observe(t, (e) => print ("Value changed"));
但是如何对简单变量执行此操作?
【问题讨论】:
【参考方案1】:(此答案适用于 Polymer.dart。)
observe
包包含单个可观察值的包装器:ObservableBox
。
import 'package:observe/observe.dart';
import 'dart:async';
void main()
ObservableBox myValue = new ObservableBox('hello');
myValue.changes.listen((List<ChangeRecord> records)
PropertyChangeRecord record = records[0] as PropertyChangeRecord;
print('$record.field changed, it is now $myValue.value');
);
new Timer.periodic(const Duration(seconds: 1), (t)
myValue.value = new DateTime.now();
);
如果不使用 ObservableBox,就无法观察***或函数范围的单个字符串、布尔值、int 或 double。
如果 string、boolean、int 或 double 是类的字段,则可以使用 ObservableMixin
和 @observable
注解。
class Foo extends Object with ObservableMixin
@observable String bar = '';
然后,当 Foo 的实例发生更改时,您会收到通知:
foo.changes.listen((List<ChangeRecord> records)
// ...
);
【讨论】:
目前(SDK 1.6)似乎是名称而不是字段,以及 oldValue 和 newValue。但是, name 是一个符号,因此 record.name == "myProperty" 不会评估。小时。 所以 record.name == "myProperty" 需要使用镜像转换为字符串。请参阅下面的答案和代码。【参考方案2】:这里是一个字符串值绑定的例子,它是对象属性:
<!DOCTYPE html>
<html>
<head>
<title>index</title>
<script src="packages/polymer/boot.js"></script>
</head>
<body>
<template id="_template" bind>
<input type="text" value="name">
<p>The name is name</p>
</template>
<script type="application/dart" src="index.dart"></script>
</body>
</html>
import 'dart:html';
import 'package:polymer/polymer.dart';
class Person extends Object with ObservableMixin
@observable
String name;
Person(this.name);
main()
query("#_template").model = new Person('Bob');
【讨论】:
以上是关于dart语言中如何观察简单变量的主要内容,如果未能解决你的问题,请参考以下文章