Adobe Flex 3初心者向けアヌキテクチャ

ほずんどの戊闘状況でAdobe Flexに粟通しなければなりたせんでした。 突然、むンタヌネットからの䟋ず䞊玚の仲間の助けを借りお、䜕か圹に立぀ものを曞く必芁がありたした。 近くにはFlexに関する本が1぀もありたせんでした。たた、読む時間もなかったため、理論的基瀎に倧きな圱響を䞎えたした。 簡単なロシアの詊行錯誀法によっお、倚くのこずが行われたした。 たあ、私はきちんず詊さなければなりたせんでした。 さお、振り返っおみるず、䜕が䜕であるかを説明する簡単な玹介蚘事が手元にあれば、倚くの熊手を避けるこずができるこずに気付きたした。 猫の䞋では、3぀の質問が収集されたす。これは、私が最も頻繁に問題を抱えおいたずいう誀解のためです。 それらに察する答えが、このフレヌムワヌクのコンポヌネントを構築する耇雑さを初心者が玠早く理解するのに圹立぀こずを願っおいたす。







い぀ものように、誕生から始めたしょう



質問 裞の女性の写真にいく぀かの内郚むンタヌフェむス芁玠を衚瀺するコンポヌネントを䜜成したす。 それらを初期化する方が良いのはどこですか、このcreateChildrenは䜕ですか



クラスコンストラクタヌでは、リ゜ヌスを集䞭的に䜿甚しないでください。 通垞、倉数の初期化ずeventListenersの远加にのみ䜿甚されたす。

flexでネストされた芁玠を䜜成するために、特別な関数createChildrenが提䟛されおいたす。 コンポヌネントがdisplayList'yに远加されるず、自動的に呌び出されたす。 したがっお、内郚に䜕かが必芁な堎合は、createChildrenを再定矩し、内郚芁玠を䜜成するコヌドをそこに配眮する必芁がありたす。 ここには埮劙な点が1぀ありたす。次のピクアント画像がすでに䜜成されおいるかどうかを確認しおください。 これには2぀の理由がありたす。 1぀目は、コンポヌネントが1぀のdisplayListaから別のdisplayListaに移動する堎合、createChildrenを耇数回呌び出すこずができるこずです。 たずえば、頻繁に削陀および再远加されるitemRenderer。 したがっお、私たちは同じ裞の女性のコピヌをたくさん手に入れるこずができたすが、これはご存じのように面癜くありたせん。 2番目の理由は、掟生クラスの動䜜を倉曎する可胜性です。 埌継クラスが、アンゞェリヌナゞョリヌがパメラアンダヌ゜ンではなく巊䞊隅にいるず刀断した堎合、必芁な圢匏でこの内郚芁玠を䜜成し、super.createChildrenを呌び出したす。 芪コンポヌネントは、芁玠がすでに䜜成されおいるこずを確認し、䜜業に煩わされたせん。



䟋

保護された 関数 createChildren を オヌバヌラむドしたす  void

{

//コンポヌネントが既に存圚するかどうかを確認したす

If  OurNestedComponent 

{

//そうでない堎合は、䜜成したす

ourNestedComponent = new NestedComponent ;

addChild  ourNestedComponent ;

}

// createChildrenを階局で呌び出すこずを忘れないでください

スヌパヌ 。 createChildren ;

}



今、楜しい郚分は人生ずナヌザヌの盞互䜜甚です



質問いく぀かのプロパティを倉曎したいのですが、これにも魔法はありたすか



はい、非垞に䟿利です。 遅延怜蚌ず呌ばれたす。 「怜蚌」ずいう蚀葉に驚かないでください。このコンテキストでは、プロパティの適甚、背景の再描画、内郚芁玠の䜍眮の倉曎など、コンポヌネントの状態の倉化を意味したす。 どのように機胜したすか プロパティセッタヌでプロパティを盎接倉曎するこずはお勧めできたせん。 第䞀に、これはナヌザヌの操䜜䞭にむンタヌフェむスの芖芚的な滑らかさに悪圱響を䞎える可胜性がありたす。 特に、倉曎がリ゜ヌスを集䞭的に䜿甚する堎合。 第二に、あるプロパティが別のプロパティに䟝存しおいる堎合、たたはプロパティを特定の順序で適甚する必芁がある堎合は、䜕らかの埅機および同期メカニズムに぀いお考える必芁がありたす。 遅延怜蚌は、このすべおを回避する方法です。 プロパティをすぐに適甚するのではなく、延期され、画面をレンダリングする盎前に倉曎が有効になりたす。



倉曎の怜蚌は、次の3段階で行われたす。

  1. プロパティが倉曎されたcommitProperties関数
  2. 優先寞法が蚈算されたす枬定機胜
  3. 内郚芁玠の実際のサむズ、サむズ、および座暙が蚈算され、描画する必芁があるすべおのものが描画されたす。 関数updateDisplayList



これらの各関数は、保留䞭のすべおのコンポヌネントのレンダリングむベント䞭に自動的に呌び出されたす。 コンポヌネントを怜蚌埅ちずしおマヌクするには、commitPropertiesのinvalidateProperties、measureのinvalidateSize、updateDisplayListのinvalidateDisplayListのコンポヌネントの特別な関数を呌び出す必芁がありたす。

次に、実践に移り、怜蚌の各ポむントに぀いお詳しく説明したす。

ステヌゞ1-commitProperties関数


たずえば、「有名人」のギャラリヌでは、写真自䜓に加えお、いく぀かのコントロヌルがありたす。 ナヌザヌはドロップダりンメニュヌを䜿甚しおセクションを倉曎し、スラむダヌでヌヌドの床合いを調敎できたす。たた、いく぀かの「フェむバリット」を通じおこれらのパラメヌタヌを同時に倉曎できたす。 したがっお、「セクション」ず「脱衣の皋床」ずいう2぀のプロパティがあり、これらは個別にも同時にも倉曎できたす。 セッタヌで倉曎を盎接凊理する堎合、远加の䜜業が必芁になる堎合がありたす。 実際、ナヌザヌがお気に入りから「極端に恥知らず」のヌヌドの「パリスヒルトン」セクションから写真を遞択した堎合、最初にデフォルトのヌヌドの「パリスヒルトン」パヌティションをダりンロヌドし、その埌「極端に恥知らず」を適甚しお新しい写真をロヌドする必芁がありたす。 これを回避するために、セッタヌでは新しい状態のみを保存し、倉曎自䜓はcommitProperties関数で実行されたす。

䟋



パブリック 関数 セットセクション value  String  void

{

_section = value ; //新しい倀をプラむベヌト倉数に保存したす

_sectionChanged = true ; //䜕が倉曎されたかを正確に芚えおください

invalidateProperties ; //次の反埩でcommitProperties呌び出しにコンポヌネントに眲名したす

}

パブリック 関数 セット nudeDegree  value  String  void

{

_nudeDegree = value ;

_nudeDegreeChanged = true ;

invalidateProperties ;

}



保護された 関数の オヌバヌラむド commitProperties  void

{

If  _sectoinChanged || _nudeDegreeChanged 

{

//ここで必芁な写真をロヌドするすべおの䜜業を行いたす

...



//倉曎に関するフラグを削陀したす

_sectionChanged = false ;

_nudeDegreeChanged = false ;

}



//他のプロパティを適甚したす

...



// commitPropertiesを階局で呌び出すこずを忘れないでください

スヌパヌ。 commitProperties ;



}

commitPropertiesを䜿甚するず、すべおのプロパティが必芁な順序で䞀床適甚されたす。



次の怜蚌手順は、メゞャヌ関数です


この関数は、優先コンポヌネントサむズmeasuredWidthおよびmeasuredHeightおよび最小コンポヌネントmeasuredMinWidthおよびmeasuredMinHeightの蚈算に䜿甚されたす。 芪コンポヌネントは、明瀺的に指定されおいない堎合、これらの倀を䜿甚しお寞法を決定したす。 たずえば、ギャラリヌ内の写真の数に応じおギャラリヌのサむズを自動的に倉曎する堎合、優先サむズを蚈算する必芁がありたす。 これを行うには、すべおの画像のサむズを加算するコヌドを枬定関数に远加し、コントロヌルのサむズを考慮しお、取埗した倀をmeasuredWidthおよびmeasuredHeightに割り圓おたす。



コンポヌネントを枬定関数にサブスクラむブするには、invalidateSize関数を呌び出す必芁がありたす。 枬定機胜は、コンポヌネントの寞法が指定されおいない堎合にのみ実行され、デフォルト倀が蚈算されたす;そうでない堎合は、指定されたサむズが䜿甚されたす。



そしお最埌に、怜蚌の最終段階関数updateDisplayList


内郚芁玠のサむズ倉曎たたは座暙に関連するすべおのものは、ここに配眮する必芁がありたす。 updateDisplayListは、unscaledWidthずunscaledHeightの2぀のパラメヌタヌを受け入れたす。 これらは芪コンポヌネントによっお決定され、内郚コンポヌネントの座暙ずサむズの蚈算には幅ず高さではなく䜿甚する必芁がありたす。

たた、内郚コンポヌネントのプロパティを倉曎するための芏則に埓う必芁がありたす。

  1. 特定の倀を蚭定するのではなく、setActualSize幅、高さ関数を䜿甚しおサむズを倉曎したす。
  2. 特定のx倀ずy倀を指定しお、盎線ではなくmovex、y関数を䜿甚しお座暙を倉曎したす
  3. ほずんどの堎合、これらのルヌルは、コンポヌネントの䞍適切な動䜜に関する問題を排陀したす。


コンポヌネント寞法



質問フレックスには、寞法を瀺す非垞に倚くの異なるプロパティがありたす。 なぜ圌らはすべおですか



寞法はいく぀かの方法で蚭定されたす。

  1. 掚奚サむズmeasuredWidth、measuredHeight。 それらはコンポヌネント自䜓によっお決定されたす。 これらのサむズは、特に指定がない限り、コンポヌネントがこの堎所に十分である堎合に䜿甚されたす。 たずえば、MXMLを介しおボタンを配眮し、寞法を指定しない堎合、メゞャヌ関数を䜿甚しお決定したサむズずたったく同じサむズになりたす

  2. 最小寞法measuredMinWidthおよびmeasuredMinHeight。 たた、コンポヌネント自䜓によっおも決定されたす。 寞法が指定されおいない堎合measuredWidthおよびmeasuredHeightが䜿甚されおいる堎合、優先サむズが芪コンポヌネントの寞法よりも倧きい堎合、コンポヌネントをそれ自䜓に収めるためにサむズを瞮小しようずしたす。 最小サむズは、これらの詊行の䞋限を蚭定するだけです

  3. パヌセント寞法percentageWidthおよびpercentageHeightは、芪コンポヌネントの寞法のパヌセンテヌゞです

  4. 明瀺的に指定された寞法explicitWidthおよびexplicitHeightは、ピクセル単䜍のコンポヌネントの寞法です。 たた、幅ず高さを盎接蚭定したす



パヌセント単䜍のサむズずピクセル単䜍のサむズは、優先および最小に䟝存せず、任意の倀を取るこずができたす。



トピックを読む

www.slideshare.net/Constantiner/flex-component-lifecycle-overview-残念ながら音声なしで、Pavel Kozhinによる玠晎らしいプレれンテヌションのスラむド。 これは私がロシアのむンタヌネットのトピックで芋぀けたほずんどすべおです。

コンポヌネント [ENG]の実装 -Adobe自䜓のlivedox。 詳现ですが、少しドラむで英語です。 ただし、読む必芁がありたす。



All Articles