[备忘] XML XMLList XMLListAdapter XMLListCollection 源代码分析

这些类已经很底层了, 为什么还要分析源代码?

这段时间我在做一个 基于 Flex4.5.1 的 spark Tree, 其实无论是什么Flex Tree组件, 内部只支持两大List容器系列:

一是 Array系列:, Array, ArrayList, ArrayCollection, 另一类就是 XML系列: XML, XMLList, XMLListAdapter, XMLListCollection.

而XML系列, 天然就是一个 tree 的数据结构, 和 Tree Component 有着高度的神似, 所以需要深入分析一下.

有什么问题?

XML系列和Tree组件高度神似, 但却又是"貌合神离"! XML系列为了广泛适用各种场景,做了很多的封装, 而Tree组件需要的是和数据源 leaf 对 leaf, branch 对 branch的深入地一对一, 这样更有效率.

上面的话可能比较抽象: 说一个最具体的例子: XMLCollection的CollectionEvent事件侦听器, 不但可以侦测到 当前node的事件, 还可以侦测到 孙子, 孙子的孙子, 等无穷后代的事件. 但Tree Component的branch其实只需要侦测当前 node的事件, 不需要侦测无穷后代的事件, 无穷侦听反而会造成不少的麻烦, 这一点可以通过 adobe mx:Tree 和 第三方的 sparkTree组件能看出来.

通过分析代码, 得出什么结论?

大部是网络上已经有的结论, 只是通过源代码再次清晰, 不过还是有不少意外的发现.

1. 从应用角度来说, XML系列和Array系列有一定对应:

XML/XMLList = Array = AS3语言层的数据类型, 但从 集合变化事件来说, XML系统有天然的callback(后面再说)
XMLAdapter = ArrayList = 主要实现了 IList接口, 但没有 sort 和 filter, 会 fire CollectionEvent
XMLListCollection = ArrayCollection = 继承自ListCollectionView, 同时实现了 IList和ICollectionView(有sort和filter)

2. 和Array系列相比, XML系列有些不同:

事件传递方面, 分别是两个极端: XML系列, 子事件默认递归传给parent, 直到root, 而Array系列, 除非你自己在外围写代码, 否则你要是想用Array系列来搭建一个Tree型的自定义数据类型结构, 必须循环递归加入CollectionEvent的listener.

XMLListCollection内部用XMLAdapter来实现, 而 ArrayCollection和ArrayList之间则不是这样的关系.

3. 和Array类不一样, XML类, 天生支持 "data change notification callback"

XML类有两个未公开的函数:
XML.setNotification( callback :Function);
XML.notification(); // 意思是 getNotificationFun

callback notification 函数的原型已经用 interface 固定化:

mx.utils.IXMLNotifiable{

function xmlNotification(
              currentTarget:Object, 
              type:String,
              target:Object,
              value:Object,
              detail:Object):void;


如果你想看具体的测试例子:
http://www.docsultant.com/site2/articles/flex_internals.html#xmlNotify
http://ticore.blogspot.com/2008/02/as3-e4x-xmlsetnotification.html

 XML类 的 notification callback是 XML系列数据变化事件的基础, mx.utils.XMLNotifier类封装了这个机制, 而XMLListAdapter又引用了 XMLNotifier 这个单例类.

4. 一个XML对象 同时 只能 有一个 notifycation callback, 按道理: 如果一个XMLListCollection有多个CollectionEvent的listener,应该只能有一个能侦测到数据变化事件呀??, 但事实不是这样!!

那是因为 mx.utils.XMLNotifier 将callback做了一对多的工作: 一指的就是直接set到xml对象的callback函数(initializeXMLForNotification返回的匿名函数), 多指的是 多个 IXMLNotifiable(其实是XMLAdapter),

比较有意思的是, Adobe开发人员直接将 Dictionary<IXMLNotifiable> 直接存在 xml.notifiction().watched 这个属性上, 巧妙地应用了Function的动态类的特性!

 所以一定要谨慎直接使用 XML.setNotification, 因为那样会使其它的侦听函数失效.

5.  经过测试发现: 实际上 XML notifcation callback天生就是监听无穷后代的, 这和我预想的不一样: 我以为是 比XML类更上层的类做的封装. 如何关闭?!

没有找到什么 hack 级的API来关闭 XML向上逐层递归调用 notifcation callback. 但是可以在 callback函数内做判断: 是否是本层节点数据变化, 主要机制就是判断 currentTarget和target是否 === 

private function notificationFunction1(
	currentTarget:Object,
	type:String,
	target:Object,
	value:Object,
	detail:Object):void
{
	if ( currentTarget !== target ) {
		//只需管好自己的attribute, 以及chilren的增加删除
                //不要再操心 children的 attribute, 以及孙子, 重孙, 重重孙 的事啦!!!
                //中国古话: 儿孙自有儿孙福
		return;
	}
	// xxxx
}

下一步:

准备应用在 我的 spark4.5.1Tree控件中.

smithfox | Wednesday 13 July 2011 at 4:08 pm | | UI       

six comments

zrong

Adobe 留了太多的后门了……

zrong, (URL) - 14-07-’11 09:31
2er

楼主强大,学习了~~

2er, - 02-09-’11 11:16
sandals shoes womens

I have been exploring for a bit for any high-quality articles or blog
posts on this sort of space . Exploring in Yahoo I finally stumbled upon this web
site. Studying this info So i’m glad to exhibit
that I’ve an incredibly just right uncanny feeling
I found out exactly what I needed. I so much undoubtedly will make certain to
don?t fail to remember this web site and give it a
glance on a continuing basis.

sandals shoes womens, (URL) - 28-07-’17 08:00
Michaela

compagnie de menage rive sud, service de femme de ménage
Professionnelle de l’entretien, notre dynamique entreprise saura réaliser pour vous l’ensemble des travaux ménagers.

G.E.M. s’engage sur une prestation dee qualité
! nettoyage de bureau montreal
Notre équipe de spécialistes chevronnés accomplira un travail à la fois soigné, rapide et économique.

De plus, nous utilisons exclusivement des produits écologiques et hautement performants, issus ddes toutes dernières technologies.

La vie moderne véhicule aussi de lourdes menaces. D’apparence inoffensive, meubles, appareils ménagers, matériaux de construction, jouets ou objets familiers peuvent dégager des phtalates ou autres redoutables composés chimiques.

G.E.M Ménage s’adapte.

Choisissez le jour à votre convenance.

Le choix le plus populaire est uune fois par semaine. Toutefois, vous
êtes libre dde déterminer votre fréquence moindre, toutes les
deux semaines, une fois par mois…. G.E.M MÉNAGE s’adapte à vore
besoin et à votre budget.

Nous individualisons le service de nettoyage. Notre expérience nous a enseigné que chaque
immeuble ou maison est unique, comme les gens qui y vivent.

Le prix popur nettoyer un immeuble ou unee maison est basée sur plusieurs facteurs.
La taille du lieu et la fréquence de nettoyage sont pris en compte.
Cependant, nous intégrons également dans notre analyse,
les surfaces à nettoyer et à désinfecter, laa présence ou nnon d’animaux de compagnie,
l’encombrement du lieu.

Pouur vous proploser un devis qui conviendra à votre budget,
G.E.M MÉNAGE vous rencontre chez vous afin de prendre connaissance du lieu et mieux comprendre vos besoins et
exigences de nettoyage.Si beaucoup pensent que le nettfoyage
de burezux se résume à passer l’aspirateur, nettoyer less vitrines et vider les poubelles,

En faisant appel à une entreprise telle que G.E.M Québec, vous avez la garantie d’un nettoyage régulier et de qualité professionnelle.

Les prestations sont effectuées parr des agents d’entretien qualifiés qui sont formés aux techniques dde
nettoyage proprws à vos types de locaux.

Pour satisfaire tous vos besoins en matière d’entretien ménager, G.E.M vous offre un service d’entretien et de nettoyage résidentiel de haut qualité
à un prix parfaitement compétitif. Tout le ménage dee votre
domicile est pensé et réalisé dans ses moindres détails.

Lorsque vous remettez l’entretien de votre maison aux mains méticuleuses dee G.E.M, rien n’est laissé aau hasard.

Chaque pièce est importante, et cce dans ses moindres recoins.
Non seulement nous allions notre savoir-faire à une efficacité qui dépassera vos attentes, mais chaque entretien ménager esst effectué avec la plus grande discrétion.Service d’entretien et de
nettoyage résidentielune entreprise de nettoyage industriel spécialisée dans
la propreté de voss locaux professionnels (immeubles, bureaux, locaux industriels).L’équipe est
composée d’agents de nettoyage qualifiés prêts à intervenir sur tous les types de chantiers,, après l’élaboration d’un devis de nettoyage complet et précis, qu’il
s’agisse d’une intervention de nettoyage particulier ou
d’un nettoyage de locaux professionnels.De l’entretien courannt
des sols, vifres et meubles – au nettoyage très spécifique
de matériel professionnel ; G,E.M prend en charge l’intégralité de votre entreetien ménager.
Que ce soit pour vos bureaux, hôtels et
surfawces dee ventes qui demandent un entretien méticuleux
car représentants de vktre enseigne ou espaces communs d’immeubles qui connaissent un fort taux dde passage, G.E.M MÉNAGE répond à voss besoins.

propose ddes prestations avfec une équipe hautement qualifiée ainnsi que du matériel de nettoyage
répondantà tous les besoins de nettoyage dazns les bureaux.Les prestations sont effectuées par des agents d’entretien qualifiés qqui
sont formés aux techniques de nettoyage propres à vos types de locaux.
Il est important dee notesr que les intervenants
sont employés directement par g.e.m et nnon par vos soins
Si beaucoup pensent qque le nettoyage dde bureaux se résume à
passer l’aspirateur, nettoyer les vitrines et vider les poubelles,entretien ménager résidentiel
Franchise de Nettoyage Résidentiel eet Commercial, service dee femme de ménage
,entretien ménager commercial,entretien ménager commercial, ménage résidentiel, service d’entretien ménager montréal
Nous aidons les personnes désireuses d’être propriétaires
d’entreprises prospères à devenir des
professionnels du nettoyage commercial eet de la maintenance.
En rejoignant notre réseau d’entreprises, vous bénéficierez d’un avantage concurrentiel ainsi
que d’une aide apportée par un modèle d’affaires éprouvé vous assurant de travailler avec un leader du
domaine disposant de l’expérience et la stabilité.

Vous disiez augmentez voos revenus afin d’améliorer vootre quotidien ?

Faites Apperl a G.E.M Ménage! service de femme de ménage ,entretien ménager commercial,entretien ménager commercial,
ménage résidentiel, service d’entretien ménager montréal, service de femme
de ménage ,entretien ménager commercial,entretien ménager
commercial, ménage résidentiel, serrvice d’entretien ménager montréal
Franchises de Nettoyage Résidentiel et Commercial disponible Partout
A Montréal ,Rive Nord et Rive Sud.

Financement Sans Intérêt par G.E.M .
Un dépôt est obligatoire

Un Investissement de 24 000$ Vous Rapporte (4800$ et
plus dee Revenus par Mois)!

Matériel et formation fourni

Nous adons lles prsonnes désireuses d’être propriétaires d’entreprises prospères à
devenir des professionnels du nettoyage commercial et de
la maintenance. En rejoignant notre réseau d’entreprises, vous bénéficierez d’un avantage
concurrentiel aiinsi que d’une aide apportée par un modèle d’affaires éprouvé vous
assurant de travailler avec un leader du domaine disposant de l’expérience et
la stabilité.

G.E.M Ménage vous offre l’opportunité de travailler pendant
la journée de lundi a vendredi .

G.E.M Voous propose des contrars d’entretien ménager avec
dees horaires souples et un revenu garanti.

Pour les personnes libres,les nouveaux arrivants ou les sans-emplois
G.E.M peut favoriser votre accès aau marché du travail !

G.E.M vous propose ddes contratts stables et rémunérateurs!

Dans lle secteur résidentiel idéal pour un couple, ou un homme seul dans le secteur commercial
Vous débuter des maintenant

Des techniques eet méthodes de travail éprouvées.

Une aide à la consttution ou à l’enregistrement
de leur entreprise.
Dees territoires d’exercice protégés.
Entreprise clés en main.
Un garantie qui protège votre investissement

Exigences de l’entrée de notre réseau :
Les demandes sont examinées attentivement et une enquête reelative à lla candidature est menée.

Les candidats doivent passer une entrevue de sélection.

Avant tout début d’activité, les candidats doivent assister à dees
sessions de formation.

Au G.E.M. nous nous assurons que nos franchisés puissent offrir à leurs clients un service
professionnel d’une qualité supérieure à celle
de la concurrence.
Franhise disponible au résidentiel et commercial

N’hésitez pas à nous contacter
469 Jean-Talon Ouest Suite # 222
Montreal QC
gemmenage.net
gemmenage.com

Michaela, (URL) - 04-08-’17 01:20
service de ménage de bureaux montréal,

service de ménage de bureaux montréal,entretien ménager résidentiel Montréal, service de
femme de ménage
Professionnelle de l’entretien, notre dynamique entreprise
sauraa réaliser pour vous l’ensemble des travaux ménagers.

G.E.M. s’engage sur une prestation de qualité ! entretien ménager
résidentiel Montréal
Notre équipe dde spécialistes chevronnés
accomplira un travail à laa fois soigné, rapide et économique.

De plus, nous utilisons exclusivement des produits écologiques et hautement performants, issus
ddes toutes dernières technologies.
La vie moderne véhicule aussi de lourdes menaces.
D’apparence inoffensive, meubles, appareils ménagers, matériaux de construction, jouets ou obmets familiers peuvent dégager
des phtalates ou autres redoutables composés chimiques.

entretien ménager résidentiel, service de femme de ménage,
entretien ménager résidentiel Montréal
nettoyage commercial montréal, entreetien ménager
résidentiel Montréal, service de femme de ménage
Professionnelle de l’entretien, notre dynamique engreprise saur réaliser pour vous l’ensemble
des travaux ménagers.
G.E.M. s’engage sur une prestation de qualité ! entdetien ménager résidentiel Montréal,G.E.M Ménage s’adapte.

Choisissez le jour à votyre convenance.

Le choix le plus populaire est une fois par semaine.
Toutefois, vous êtes libre de déterminer votre fréquence moindre, toutes les deux semaines, une fois par mois….
G.E.M MÉNAGE s’adapte à votre brsoin et à votre budget.

Nous indiividualisons lee service de nettoyage. Notre expérience nous a enseigné que chque
immeuble ou maison est unique, comme lles gens qui y vivent.

Le prix pour nettoyer un immeuble ou une maison esst basée
sur plusieurs facteurs. La taille du lieu et la
fréquence de nettoyage sont pris enn compte. Cependant, nous
intégrons également dans notre analyse, les surfaces
à nettoyer et à désinfecter, la présence ou
noon d’animaux de compagnie, l’encombrement du lieu.

Pour vous proposer uun devis qui conviendra
à votre budget, G.E.M MÉNAGE vous rencontre chez vous afin de prendre connaissance du
lieu et miwux comprendre voos besoins et exigences de nettoyage.Si beaucoup pensent que
le nettoyage de bureaux se résume à passer l’aspirateur, nettoyer les vitrines et vider les poubelles,
En faisant appel à une entreprise telle que G.E.M Québec,
vous avez laa garasntie d’un nettoyage régulier et
dee qualité professionnelle.

Less prestations sont effectuées par des agents d’entretien qualifiés
quui sont formés aux techniques de nettoyage propres à
vos types de locaux.

Pour satisfaire tous vos besoins en matière d’entretien ménager,
G.E.M vouys offrre un service d’entretien et de nettoyage résidentiel de haute
qualité à unn prix parfaitement compétitif. Tout le ménage de votre domicile est pensé et
réalisé dans ses moindres détails.

Lorsque vous remettez l’entretien de votre maison aux mains méticuleuses de G.E.M,
rien n’est laissé au hasard.

Chaue pièce est importante, et ce dans ses moindres recoins.
Non seulement nous allions notre savoir-faire à une efficacité
qui dépassera vos attentes, mais chaque entretien ménager
eest effectué aavec la plus grande discrétion.Service
d’entretien et de nettoyage résidentielune entreprise de
nettoyage industriel spécialisée dans la propreté de
vos loczux professionnels (immeubles, bureaux, locaux industriels).L’équipe
est composée d’agents de nettoyage qualifiés prêts à intervenir
sur tous les types de chantiers,, après l’élaboration d’un devis de nettoyage complet et précis, qu’il s’agisse d’une intervention de nettoyage particulier ou d’un nettoyage de locaux professionnels.De l’entretien courant des sols,
vitres et meublkes – aau nettoyage très spécifique de matériel professionnel ;G,E.M
prend en charge l’intégralité de votre entretien ménager.

Que ce soit pour vos bureaux, hôtels eet surfaces
de ventes qui demandent un entretien méticuleux car représentants de votre enseigne
ou espaces communs d’immeubles qui connaissent un fort taux de passage, G.E.M MÉNAGE
répond à vos besoins.
propose des prestatiuons avec une équipe hautement qualifiée ainsi
que du matériel de nettoyage répondant à tous lles
besoins de nettoyage dans les bureaux.Les prestations sont effectuées par des agents
d’entretien qualifiés qui sont formés auxx techniques de nettoyage propres à
voss types de locaux. Il est iportant de noter que les intervenants sont employés directement par g.e.m et nnon par vos soins
Si beaucoup pensent que lee nettoyage de bureaux se résume à passer l’aspirateur,
nettoyer les vitrines et vider lees poubelles,
Notre équipe de spécialistes chevronnés accomplira un travail à la fois soigné,
rapide et économique.
De plus, nous utilisons exclusivement des produits écologiques eet hautement performants,
issus des toutes dernières technologies.

La vie moderne véhicule aussi de lourdes menaces.
D’apparence inoffensive, meubles, appareils ménagers, matériaux
de construction, jouets ou objets familiuers peuvent dégager des phtalates ou autres redoutables
composés chimiques.
entretien ménager résidentiel, service de femme de ménage, entretien ménager résidentiel Montréal
Franchise de Nettoyage Résidentiel et Commercial, service de femme dde ménage
,entretien ménager commercial,entretien ménager commercial, ménage résidentiel, servkce d’entretien ménager montréal
Nous aidons les personnes désireuses d’être propriétaires d’entreprises prospères
à devenir des professionnels du nettoyage commercial ett de la maintenance.
En rejoignant notre réseau d’entreprises, vous bénéficierez d’unavantage concurrentiel ainsi que d’une aide
apportée par un modèle d’affaires éprouvé vous assurant de travailler avec unn leader du domaine disposant de l’expérience et la stabilité.

Vous disiez augmentez vos revenus afin d’améliorer votre quotidien ?

Fites Appel a G.E.M Ménage! service de femme de
ménage ,entretien ménager commercial,entretien ménager
commercial, ménage résidentiel, service d’entretien ménager montréal,
service de femme de ménage ,entretien ménager commercial,entretien ménager commercial,
ménage résidentiel, service d’entretien ménager montréal
Franchises dee Nettoyage Résidentiel et Commercial disponible Partout
A Montréal ,Rive Nord et Rive Sud.

Financement Sans Intérêt par G.E.M .
Un dépôt est obligatoire

Un Investissement de 24 000$ Vous Rapporte (4800$
et plus de Revenus ppar Mois)!

Matériel et formation fourni

Nous aidons les personnes désireuses d’être propriétaires d’entreprises prospères à devenir des professionnels du nettoyage commercial et de la maintenance.
En rejoignant notre réseau d’entreprises,
vous bénéficierez d’un acantage concurrentiel ainsi que
d’une aide apportée par un modèle d’affaires éprouvé vous assurant
de travailler avec unn leader du domaine disposant de l’expérience et la stabilité.

G.E.M Ménage vous offre l’opportunité de travailler pendant la journée de lundi
a vendredi .

G.E.M Vous propose des contrats d’entretien ménager avec des horaires
souples et un revenu garanti.

Pour lees personnes libres,les nouveaux arrivants ou less
sans-emplois G.E.M peut favoriser votre accès au marché du travail !

G.E.M vous propose des contrats stables eet rémunérateurs!

Dans lle secteur résidentiel idéal pour un couple,
ou uun homme seul dans le secteur commercial
Vous débuter des maintenant

Des techniques eet méthodes de travail éprouvées.

Une aide à la constitution ou à l’enregistrement
de leur entreprise.
Des territopires d’exercice protégés.
Entrdeprise clés en main.
Un gaarantie qui protège votre investissement

Exigences de l’entrée de notre réseau :
Les demandes sont examinées attentivement ett une enquête relative à la
candidature est menée.
Les candidats doivent passser une entrevue de sélection.
Avant tout début d’activité, les candidags doivent assister à des
sessions de formation.

Au G.E.M. nous nous assurons que nos franchisés puissent offrir à
leurs clients un service ptofessionnel d’une qualité
supérieure à celle de la concurrence.
Franchise disponible au résidentiel et commercial

N’hésitez pass à nous contacter
469 Jean-Talon Ouest Suite # 222
Montreal QC
gemmenage.net
gemmenage.comFranchise de Nettoyage Résidentiel et Commercial,
service de femme de ménage ,entretien ménager commercial,entretien ménager commercial,
ménage résidentiel, service d’entretien ménager montréal
Nous aidons les pesonnes désireuses d’être propriétaires d’entreprises prospères à
devenir des professionnels duu nettoyage commercial
et de la maintenance. En rejoignant notre réseau d’entreprises,
vous bénéficierez d’un avantage concurrentiel ainmsi que d’une aide apportée par un modèle d’affaires éprouvé vous assurant
de travailler avec un leader du domaine disposant de l’expérience ett la stabilité.

Vous disiez augmentez vos reveus afin d’améliorer vote
quotidien ? Faiites Appel a G.E.M Ménage!service de femke de ménage ,entretien ménager commercial,
entretien ménager commercial, ménage résidentiel, sergice d’entretien ménager montréal, service de
femme de ménage ,entretien ménager commercial,entretien ménager commercial, ménage résidentiel, service d’entretien ménager montréal
Franchises de Nettoyage Résidentiel et Commercial disponible
Partout A Montréal ,Rive Nord et Rivve Sud.

Financement Sanss Intérêt parr G.E.M .
Un dépôt est obligatoire

Un Investissement de 24 000$ Vous Rapporte (4800$ et plus dee Revenus par Mois)!

Matériel et formation fourrni

Nous aidons les personnes désireuses d’être propriétaires
d’entreprises prospères à devenir des professionnels du nettoyage commercial et de
la maintenance. En rejoignant notre réseau d’entreprises, vous bénéficierez d’un avantage concurrentiel ainsi
que d’une aide apportée par un modèle
d’affaires éprouvé vous assurant de travailler avec un leader
du domaine disposant de l’expérience ett la
stabilité.

G.E.M Ménage vous offre l’opportunité de travailler
pensant la journée de lundi a vendredi .

G.E.M Vous propose des contrats d’entretien ménager avec des horaires souples et un revenu garanti.

Pour les personnes libres,les nouveauhx arrivants ou
lees sans-emplois G.E.M peut favoriser votre accès au marché du travail
!

G.E.M vous propose dees contrats sttables et rémunérateurs!

Dans le secteur résidentiel idéal pkur un couple,
ou un homme seul dans le secteur commercial
Vous débuter des maintenant

Dees techniques et méthodes de travail éprouvées.
Une aide à la constitution ouu à l’enregistrement de leur entreprise.

Des territoires d’exercice protégés.
Entreprise clés en main.
Un garantie qui protège votre investissement

Exigences de l’entrée de notre réseau :
Les demandes sont examinées attentivement et une enquête relative à la candidature est menée.

Lees candidats doivent passer une entrevue de sélection.
Avant tout début d’activité, les candidats doivent assister à des sessions de formation.

Au G.E.M. nous nous assurons que nos franchisés puissent offrir à
leurs clients un service professionnel d’une qualité supérieure à celle
de la concurrence.
Franchise disponible au résidentiel et commercial

N’hésitez pas à nous contacter
469 Jean-Talon Ouest Suite # 222
Montreal QC
gemmenage.net
gemmenage.com

service de ménage de bureaux montréal,, (URL) - 28-08-’17 10:42
Online-Stiefel für Frauen

Asking questions are truly good thing if you are not understanding something totally, except this post provides good understanding even.

Online-Stiefel für Frauen, (URL) - 08-10-’17 23:49
(optional field)
(optional field)
为阻止垃圾广告, 请在提交评论前, 回答一个简单问题(Please answer an simple question)
Remember personal info?
Notify
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.