松耦合绑定是 Parsley 的一大特性。与 Flex 绑定不同的是,不能在声明中使用 MXML 对象,相同的是都可以创建不同的对象之间的绑定。一旦更新一个对象,另一个对象立即以解耦的方式更新。这就意味着绑定是用对象类型来识别的。发布者甚至不需要是一个被容器管理的对象,这点与事件消息相似。发布一个对象也不会引起反射(除非指定它应该管理),比依赖注入更轻量级。而且,它比依赖注入更动态化。订阅可以接受空属性,甚至是多个发布者更新的同一属性。与依赖注入和事件消息不同的是,松耦合绑定可以在组件的整个生命周期事件中进行发布。这些都是引入 Parsley 松耦合绑定的原因。
基本用法
Parsley 松耦合绑定通常就是发布订阅属性。
发布属性
只有一个发布者时使用 Publish 元数据标签。一旦更新发布者的属性,值会被推送给任何上下文中匹配该类型的订阅者。这有点类似 Flex 的单向绑定。使用方法很简单,直接在被管理的对象上使用 Publish 元数据标签,如本实例的代码片段:
[Publish]
public var sharedModel:SharedModel = new SharedModel();
不难看出,我们使用 new 来新建对象实例,避免了反射引起的性能开销。
订阅属性
直接使用 Subscribe
元数据标签进行属性订阅。当发布者更新属性值时,将同步更新所有订阅者的属性值,类似于只读属性。如本实例的代码片段:
[Subscribe]
[Bindable]
public var sharedModel:SharedModel;
订阅时 [Bindable]
元数据标签往往是不可少的,这样才能同步更新。
同时发布订阅属性
[PublishSubscribe]
元数据标签允许拥有多个发布者,这就意味着发布者也可以被其它发布者更新。如果属性的类型相同,不能同时使用 [Publish]
和 [PublishSubscribe]
元数据据标签,都应该使用 [PublishSubscribe]
元数据标签。
本实例的工程结构应该是这样的:
parsley-bindings.zip)下载该实例的源码。
注意要点
- 必须确保配置不会导致模糊不清(错误配置造成的错误、特别是含糊不清有时候不会在初始化上下文的时候检测到),Parsley 必须在任何时候都知道哪个发布者是“负责”哪个特定订阅者。一个发布者可以有多个订阅者,在单个作用域中,对多个相同类型的实例(属性或 ID)使用
[Publish]
标签是非法的。 - Parsly 的松耦合绑定的意义在于同时发布订阅属性,如果只有一个发布者一个订阅者,那么使用 Parsly 的事件消息就够了。
- 最好尽量像其他的特性一样使用按类型匹配,避免使用字符串标识符。
- 除了全局作用域,任何其他作用域必须使用
scope
属性显式指定。在Publish
元数据标签使用托管属性,可以将容器管理的对象或任何其他容器不知道的对象,发布给订阅者。
参考文档
- 要更多了解 Parsley 松耦合绑定,请查看 Parsley 文档相应部分。
评论 (0)