בניית תפריט מבוסס ACCORDION מ XML

שאלות ודיונים בכל הנוגע לפיתוח פלקס (Flex) ושפת MXML, פלקס מגרסאות 1.5 עד הנוכחית. בנוסף, דיונים בנושא טכנולוגיית AIR לשולחן העבודה (Adobe Integrated Runtime), פיתוח פלאש ל desktop או AIR ל Mobile. עם יציאתה של Slider, פורום זה ידון גם ב Framework הזה.

בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי פלג ב 20 דצמבר 2011, 21:41

אני רוצה לבנות תפריט מבוסס על Accordion.
הצלחתי לעשות איד פשוט מבוסס על XML עם REPEATER.
אני רוצה ב XML להגדיר לו גם איזה כפתור/ים להציג בכל חלק של ה Accordion.
הקוד שיש לי כרגע:
Syntax: [ Download ] [ Hide ]
Using actionscript3 Syntax Highlighting
<mx:Accordion width="400" height="400" creationCompleteEffect="Iris" openDuration="500"
                                          >
                                       
                        <mx:Repeater id="rep" dataProvider="{pictures}">

                                <mx:VBox width="100%" height="100%"
                                                 verticalAlign="middle" horizontalAlign="center"
                                                 label="{rep.currentItem.title}"  >
                                        <mx:Button label="{rep.currentItem.title}"/>
                                </mx:VBox>
                        </mx:Repeater>
                </mx:Accordion>
 
Parsed in 0.032 seconds, using GeSHi 1.0.8.4
פלג
 
הודעות: 546
הצטרף: 13 מרץ 2010, 16:07

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי atarsh ב 22 דצמבר 2011, 10:27

אני לא ממש מבינה את הבעיה שלך.
כדי להוסיף Header חדש לאקורדיון פשוט מוסיפים לו עוד קונטיינר עם label.
כדי לקבוע את התוכן של הקונטיינר רוץ על ה-XML שלך בלולאה ותוסיף כפתורים לפי הצורך.
סמל אישי של המשתמש
atarsh
 
הודעות: 1310
הצטרף: 11 מרץ 2010, 09:02
מיקום: איפשהו.. around.

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי פלג ב 22 דצמבר 2011, 14:50

כדי לקבוע את התוכן של הקונטיינר רוץ על ה-XML שלך בלולאה ותוסיף כפתורים לפי הצורך.

בדיוק בחלק הזה הבעיה, האן לעשות את זה דרך פונקציה עם קוד, או שאני יכול לעשות באותו ה REPEATER של האקורדיון?
פלג
 
הודעות: 546
הצטרף: 13 מרץ 2010, 16:07

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי פלג ב 23 דצמבר 2011, 02:16

הסתדרתי תודה
פלג
 
הודעות: 546
הצטרף: 13 מרץ 2010, 16:07

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי atarsh ב 25 דצמבר 2011, 10:45

בחמש בבוקר.. :) מה עשית בסוף?
סמל אישי של המשתמש
atarsh
 
הודעות: 1310
הצטרף: 11 מרץ 2010, 09:02
מיקום: איפשהו.. around.

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי פלג ב 25 דצמבר 2011, 13:16

עשיתי REPEATER בתוך REPEATER
אם כי זה לגמור, אני יעדכן בסוף איך זה נראה :)


טוב יש בעיה, ה REPEATER הפנימי מביא לי את כל הבנים עבור כל "כותרת של אקורדיון", במקום להביא רק את זה שרלוונטי לכותרת המסויימת. :
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
<?xml version="1.0"?>
<MENU>
        <MAIN title="Accounts">
                <BUTTON>Create</BUTTON>
                <BUTTON>UPDATE</BUTTON>
                <BUTTON>CLOSE</BUTTON>
        </MAIN>
        <MAIN title="System">
                <BUTTON>LogOn Hours</BUTTON>
                <BUTTON>Update Details</BUTTON>
        </MAIN>
        <MAIN title="Monitors">
                <BUTTON>Info/Warning</BUTTON>
                <BUTTON>Error</BUTTON>
        </MAIN>
        <MAIN title="Statistics">
                <BUTTON>ALL</BUTTON>
        </MAIN>
</MENU>
 
Parsed in 0.004 seconds, using GeSHi 1.0.8.4


Syntax: [ Download ] [ Hide ]
Using actionscript3 Syntax Highlighting
<fx:Script>
                        <![CDATA[
                        import mx.rpc.events.ResultEvent;
                        import mx.collections.ArrayCollection;
                                import mx.collections.XMLListCollection;
                                import mx.collections.IList;
                                [Bindable]
                                private var MainHeaders : XMLListCollection;
                                [Bindable]
                                private var Buttons : XMLListCollection;
                                [Bindable]
                                public var list1:XMLListCollection;
                                //private var pictures : ArrayCollection;
                       
                        private function serviceHandler(event:ResultEvent):void{
                                //pictures = event.result.MENU.title.@x;
                                MainHeaders = new XMLListCollection(event.result.MAIN);
                                Buttons = new XMLListCollection(event.result.MAIN.BUTTON);
                                //list1 = new XMLListCollection(event.result.MENU);
                        }
                        ]]>
                </fx:Script>
                <fx:Declarations>
                        <fx:XML id="nodes" format="e4x" />
                        <mx:HTTPService id="service" url="datas.xml" resultFormat="e4x" result="serviceHandler(event)"/>
                </fx:Declarations>
       
       
                <mx:Accordion width="200" height="250" creationCompleteEffect="Iris"
                                          openDuration="500">
                                       
                        <mx:Repeater id="rep" dataProvider="{MainHeaders}" height="50">
                                <mx:VBox width="100%" height="100"
                                                 verticalAlign="middle" horizontalAlign="center"
                                                 label="{rep.currentItem.@title}"  >
                                        <mx:Repeater id="btnRepeater" dataProvider="{Buttons}">
                                                <mx:Button label="{btnRepeater.currentItem}"/>
                                        </mx:Repeater>
                                </mx:VBox>
                        </mx:Repeater>
                </mx:Accordion>
 
Parsed in 0.037 seconds, using GeSHi 1.0.8.4
פלג
 
הודעות: 546
הצטרף: 13 מרץ 2010, 16:07

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי פלג ב 25 דצמבר 2011, 23:01

פתרתי:)
מה שלא עובד לי זה איך אני יכול לגרום לכך שכאשר יש לי שם של EVENT בתוך ה XML
אני יכול ב REPEATER לעשות לו BIND ולוהסיף את הEVENT מתוך ה XML ושזה יעבוד?
לדוגמא יש לי ב XML
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
<BUTTON EVENT="myalert(event)">Create</BUTTON>
 
Parsed in 0.000 seconds, using GeSHi 1.0.8.4

אני מנסה לעשות
Syntax: [ Download ] [ Hide ]
Using actionscript3 Syntax Highlighting
<mx:Repeater id="rep" dataProvider="{MainHeaders}" height="50">
                                <mx:VBox width="100%" height="100"
                                                 verticalAlign="middle" horizontalAlign="center"
                                                 label="{rep.currentItem.@title}"  >
                                        <mx:Repeater id="btnRepeater" dataProvider="{rep.currentItem.BUTTON}">
                                                <mx:Button label="{btnRepeater.currentItem}" click="{btnRepeater.currentItem.@EVENT}"/>
                                        </mx:Repeater>
                                </mx:VBox>
                        </mx:Repeater>
 
Parsed in 0.034 seconds, using GeSHi 1.0.8.4

אבל אני מקבל שגיאה
1010: A term is undefined and has no properties.
at test/___test_Button1_click()[C:\Flex\DynamicAccordion\src\test.mxml:65]

רעיונות?
פלג
 
הודעות: 546
הצטרף: 13 מרץ 2010, 16:07

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי atarsh ב 26 דצמבר 2011, 10:21

מה שקורה לך זה שאתה מציב סטרינג במקום שמצפה לקבל פונקציה, אני משערת.
אתה יכול תמיד לתת שם פונקציה קבועה, ואז בתוך הפונקציה הקבועה לפרסר מה שכתוב לך ב-XML ולהשתמש בו:
Syntax: [ Download ] [ Hide ]
Using actionscript3 Syntax Highlighting
<mx:Button label="{btnRepeater.currentItem}" click="myFunc(btnRepeater.currentItem.@EVENT)"/>
Parsed in 0.030 seconds, using GeSHi 1.0.8.4

ואז:
Syntax: [ Download ] [ Hide ]
Using actionscript3 Syntax Highlighting
function myFunc(funcName:String) {
  this[funcName]()
}
Parsed in 0.030 seconds, using GeSHi 1.0.8.4

אולי גם עם try..catch כדי למנוע שגיאות, או עם apply כדי שזה ייראה יותר טוב..

מובן שזה דורש שינוי ב-XML כך שהוא יחזיק רק את שם הפונקציה, ולא את הקריאה לה.
סמל אישי של המשתמש
atarsh
 
הודעות: 1310
הצטרף: 11 מרץ 2010, 09:02
מיקום: איפשהו.. around.

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי פלג ב 27 דצמבר 2011, 10:18

ניסיתי כל מיני ווריאציות
כמו
Syntax: [ Download ] [ Hide ]
Using actionscript3 Syntax Highlighting
myFunc({btnRepeater.currentItem.@EVENT})
 
Parsed in 0.031 seconds, using GeSHi 1.0.8.4

לא עובד
עוד רעיונות?
פלג
 
הודעות: 546
הצטרף: 13 מרץ 2010, 16:07

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי atarsh ב 27 דצמבר 2011, 14:24

"לא עובד" זו הגדרה גרועה. מה לא עובד?
הפונקציה של לחיצה על הכפתור נקראת? אתה מקבל בתוכה את הערך הנכון מה-XML ?
סמל אישי של המשתמש
atarsh
 
הודעות: 1310
הצטרף: 11 מרץ 2010, 09:02
מיקום: איפשהו.. around.

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי פלג ב 27 דצמבר 2011, 17:52

אני לא יודע איזה ערך מופיע כי אני כל הזמן חוטף EXCEPTION בכפתור:(
פלג
 
הודעות: 546
הצטרף: 13 מרץ 2010, 16:07

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי atarsh ב 28 דצמבר 2011, 11:01

אני אנסה לכתוב משהו כזה מאוחר יותר כשיהיה לי רגע כדי להבין איפה אתה מסתבך. זה לא אמור לבוא עם שום ביינדינג, רק טקסט, לדעתי.
סמל אישי של המשתמש
atarsh
 
הודעות: 1310
הצטרף: 11 מרץ 2010, 09:02
מיקום: איפשהו.. around.

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי פלג ב 31 דצמבר 2011, 17:34

פתרתי :
When a Repeater component is busy repeating, each repeated object that it creates can bind at that moment to the Repeater component's currentItem property, which is changing as the Repeater component repeats. You cannot give each instance its own event handler by writing something like click="doSomething({r.currentItem})" because binding expressions are not allowed in event handlers, and all instances of the repeated component must share the same event handler.

solution:
Syntax: [ Download ] [ Hide ]
Using actionscript3 Syntax Highlighting
private function myFunc(funcName:String):void {
                                Alert.show(funcName);
                               
                        }

click="myFunc(event.currentTarget.getRepeaterItem().@EVENT)"
 
Parsed in 0.030 seconds, using GeSHi 1.0.8.4
פלג
 
הודעות: 546
הצטרף: 13 מרץ 2010, 16:07

Re: בניית תפריט מבוסס ACCORDION מ XML

הודעהעל ידי atarsh ב 01 ינואר 2012, 13:31

אחלה :)
סמל אישי של המשתמש
atarsh
 
הודעות: 1310
הצטרף: 11 מרץ 2010, 09:02
מיקום: איפשהו.. around.


חזור אל פיתוח Flex ו AIR

מי מחובר

משתמשים הגולשים בפורום זה: אין משתמשים רשומים ו 2 אורחים