فليكس: الوصول إلى وظائف / مكونات تزوجنا صفحات MXML

StackOverflow https://stackoverflow.com/questions/187795

  •  06-07-2019
  •  | 
  •  

سؤال

لالبساطة يتيح القول لدي صفحتين MXML المرن.

وform.mxml
button.mxml

إذا كانت الصفحة form.mxml التعليمة البرمجية التالية، يجب أن تعمل بشكل جيد:

<custom:SelectView dSource="{_thedata}" id="form" visible="false">
</custom:SelectView>

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

ولكن إذا كان رمز مثل:

وform.mxml

 <custom:SelectView dSource="{_thedata}" id="form" visible="false">
 </custom:SelectView>

وbutton.mxml

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

وكيف يمكنني إجراء مكالمة من button.mxml لتغيير form.mxml

و---- قليلا مزيد من التفاصيل ---

وصفحتي في الواقع يبدو مثل هذا: حيث الاستعلام: AdvancedSearchFields هو بما في ذلك أساسا شكل المرن في الصفحة، وأريد أن تظهر / إخفاء عرض مخصصة أدناه بعد اكتمال البحث.

<query:AdvancedSearchFields searchType="projects" searchCategory="advanced" visible="true" id="AdvancedSearch" />

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
هل كانت مفيدة؟

المحلول

هل يمكن إرسال بريد أسلوب مخصصة الذي يعالج النقر على زر الأحداث ويرفع حدث مخصص. ثم في form.mxml يمكنك التعامل مع هذا الحدث.

وتقسيم عنه مثل هذه هو أنظف قليلا، لأنه يجعل العمل ملف button.mxml من تلقاء نفسها. وجود Button.mxml ديك إشارة مباشرة إلى النموذج يؤدي إلى اقتران ضيق بين البلدين، وعموما يجب تجنب الإزدواج ضيق.

وتحرير: كان لي مجرد فكرة أخرى أن يتجنب أيضا ضيق اقتران وهو أبسط قليلا:

form.mxml

<custom:SelectView dSource="{_thedata}" id="form" visible="{buttons.showForm}">
</custom:SelectView>

<!-- include your buttons.mxml component using an ID of "buttons" -->

buttons.mxml

<mx:Script>
<![CDATA[
    [Bindable] public var showForm:Boolean = true;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="this.showForm=true;">
<mx:LinkButton label="Hide" id="lbHide" click="this.showForm=false;">

وهذا يحاكي أساسا باستخدام حدث مخصص باستخدام الربط المتغير. سيتم تحديث أي وقت متغير showForm في أزرار تغيير الخاصية مرئي من SelectView عبر الارتباطات. هذا هو أخف وزنا من إنشاء حدث مخصص (على الرغم من أنني أعتقد أن الأحداث المخصصة هي أفضل قليلا من تصميم لذلك).

نصائح أخرى

ويجب أن يكون لديك الدرجة button.mxml إشارة إلى مثيل من فئة "النموذج" الذي سوف تتأثر. ثم أنها يمكن أن تعمل على ذلك مباشرة:

Button.mxml:

<mx:Script>
<![CDATA[
    [Bindable] public var myForm:MyFormClass;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="myForm.form.visible=true;">
<mx:LinkButton label="Show" id="lbHide" click="myForm.form.visible=false;">

وعموما، المكان الأكثر منطقية لوضع هذا المتغير هو في الأصل من الدرجة Button الخاص بك.

إذا كنت بحاجة للتعامل مع هذه المشكلة في كثير من الأحيان، كنت تشير الى استخدام إطار MVC مثل PureMVC. هو إعداده بحيث يكون لديك كائن الوسيط الذي يستمع لأحداث من مكونات MXML، ثم يرسل إخطارا التي يمكن التقاطها من قبل أي وسيط آخر. ثم أن الوسيط يمكن التلاعب العنصر البصري الخاص بها على أساس التبليغ والبيانات المرتبطة بها.

في سياق ما تفعلونه (النسخة بسيطة)، وكنت على ما يرام مع الحل الأساسي. ولكن بمجرد أن نتعامل مع أربعة أو خمسة أو أكثر من المكونات مع الكثير من المنطق، فلن تكون سعيدا على الإطلاق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top