Parsley中解耦绑定(Decoupled Bindings)的生命周期

Jun 23, 2012

这次又在说Parsley这个框架,可能的话,我希望在blog中多说些偏底层基础和原理的文章,由于手边这个糟糕的项目采用了这个框架(我自找的), 官方文档也不翔实,也许是写了我没细读。总之,写给那些也许和我一样粗心到没查阅文档,或者API中没有强调说明的童鞋,主要是记录我解决这个问题的方法。

本文需要证明的论点是:Parsley中的解耦绑定的多个对象具有相同的声明周期

如果你看到这里,想法是“显然嘛!这还用说吗?”那您是高人,麻烦您留下blog,我向您学习,以我现在的水平和知识底蕴,还不能立即判断出“显然”的结论,因此才写个demo实验一下,这篇文章就是记录实验过程的。

官方文档的说明在此,其实编程高手已经可以从如下代码得到结论了:

[Subscribe]
public var selectedContact:Contact;

接收端的对象没有声明生命周期的相关代码!足以证明该对象的创建过程和源对象一致了。 反之的话,Subscribe端对象是凭空生成的?所以本文重点在证明绑定的对象们的销毁过程也是一样的

证明过程很简单,口述一下:

将Publish端对象A生命在一个TitleWindow中,在主应用中声明Subscribe端对象B。 对象B如同官方文档的写法一样,不使用new等关键字创建对象。程序运行时,改变A对象的某个属性,B对象同步变化。

这里使用的技巧是:

在TitleWindow中使用一个TextInput对象与对象A的属性绑定,在主应用中,用一个Label绑定对象B中的属性,如果在TextInput中输入内容,Label同步显示。

好了,现在开始证明销毁过程部分。一句话:关闭TitleWindow,Label内容清空。

画蛇添足地补充下证明原理:

TitleWindow中的对象随着TW的关闭销毁而销毁,销毁的内容自然会导致主应用中的对象B被销毁,因此内容被清空,如果您不放心的话,断点调试一下就知道此时对象B的引用已经指向null了。