Parsley松耦合绑定实例

松耦合绑定是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必须在任何时候都知道哪个发布者是“负责”哪个特定订阅者。一个发布者可以有多个订阅者,在单个作用域中,对多个相同类型的实例(属性或ID)使用[Publish]标签是非法的。
  • Parsly的松耦合绑定的意义在于同时发布订阅属性,如果只有一个发布者一个订阅者,那么使用Parsly的事件消息就够了。
  • 最好尽量像其他的特性一样使用按类型匹配,避免使用字符串标识符。
  • 除了全局作用域,任何其他作用域必须使用scope属性显式指定。在Publish元数据标签使用托管属性,可以将容器管理的对象或任何其他容器不知道的对象,发布给订阅者。
  • 要更多了解Parsley松耦合绑定,请查看Parsley文档相应部分

发表评论