Список гибкости с элементом рендеринга получает выбранное значение

У меня есть мобильное приложение Flex, которое в настоящее время содержит 2 представления

Представление 1 имеет список привязок данных, в котором используется itemRenderer для отображения идентификатора, а представление Label 2 отображает список привязок данных, в котором используется itemRenderer для отображения элементов управления на основе содержимого набора данных.

Все данные хранятся в базе данных SQLite.

Представление 1 - это список опросов. Представление 2 - это список вопросов по каждому опросу.

Я пытаюсь передать значение идентификатора опроса в запрос SQL в представлении 2, чтобы возвращаемые данные были вопросами, относящимися к каждому опросу.

Я снова и снова просматривал dispatchEvent, но не могу понять, как передать соответствующее значение из data.surveyID в переменную параметра в представлении 2 для запроса базы данных.

Посмотреть 1 код

                <?xml version="1.0" encoding="utf-8"?>
            <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx" 
                    title="Surveys"
                    creationComplete="listen()">
                <fx:Script>
                    <![CDATA[
                        import flash.data.SQLConnection;
                        import flash.data.SQLResult;
                        import flash.data.SQLStatement;
                        import flash.events.Event;
                        import flash.filesystem.File;
                        import mx.collections.ArrayCollection;
                        import spark.events.IndexChangeEvent;
                        import spark.events.ListEvent;
                        import spark.transitions.FlipViewTransition;
                        import spark.transitions.FlipViewTransitionMode;
                        import spark.transitions.ViewTransitionDirection;
                        private var conn:SQLConnection;
                        private function get myData():ArrayCollection 
                        {
                            var stmt:SQLStatement = new SQLStatement();
                            stmt.sqlConnection = new SQLConnection();
                            stmt.sqlConnection.open(File.applicationDirectory.resolvePath("assets/cp_db.sqlite"));
                            stmt.text = "SELECT * FROM surveys";
                            stmt.execute();
                            var result:Array = stmt.getResult().data;
                            if (result)
                            {
                                var list:ArrayCollection = new ArrayCollection();
                                for (var i:int=0; i<result.length; i++) 
                                {
                                    list.addItem(result[i]);
                                }
                                return list; 
                            }
                            else 
                            {
                                return null; 
                            } 
                        }
                        private function workingHandler ( event:Event ) : void
                        {
                            trace( "I'm the working handler here :) " );
                        }
                        private function listen():void{
                        list.addEventListener( "switchToDay", regularListener );

                        }

                        public var itemLabel:String;
                        private function regularListener (event:Event) : void
                        {
                            trace( "I'm the regular listener"  );
                            trace(itemLabel);
                        }
                        public function conIndex( ind:int):String{
                            return ind.toString();
                        }

                    ]]>

                </fx:Script>
                <fx:Declarations>
                    <!-- Place non-visual elements (e.g., services, value objects) here -->
                </fx:Declarations>

                <s:List id="list" left="10" right="10" top="10" bottom="10" labelField="{data.SurveyName}"
                        click="navigator.pushView(surveyDetailView, conIndex(list.selectedIndex+1));"
                        dataProvider="{myData}"  >
                    <s:itemRenderer>
                        <fx:Component>
                            <s:ItemRenderer>
                                <s:LabelItemRenderer id="surID" width="50" label="{data.surveyID}"/>
                                <s:LabelItemRenderer id="surName" x="0" width="100%" label="{data.SurveyName}"
                                                     click="surName.dispatchEvent(new Event('switchToDay', true,false));"/>
                            </s:ItemRenderer>
                        </fx:Component>
                    </s:itemRenderer>
                </s:List>
            </s:View>

Посмотреть 2 кода

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    title="{data}">
<fx:Declarations>
    <s:SlideViewTransition id="slideTrans" direction="down" duration="300"/>
</fx:Declarations>
<fx:Script>
    <![CDATA[
        import flash.data.SQLConnection;
        import flash.data.SQLStatement;
        import flash.filesystem.File;
        import flash.filesystem.FileMode;
        import mx.collections.ArrayCollection;
        import spark.components.Button;
        import spark.components.Label;
        public var surveyIdParam:String = '1';
        public var myPar:String;
        public function get myData():ArrayCollection 
        {
            var stmt:SQLStatement = new SQLStatement();
            stmt.sqlConnection = new SQLConnection();
            stmt.sqlConnection.open(File.applicationDirectory.resolvePath("assets/cp_db.sqlite"));

            stmt.parameters[0] = surveyIdParam;
            stmt.text = "SELECT * FROM surveyquestions  where surveyID = ?";
            stmt.execute();
            var result:Array = stmt.getResult().data;

            if (result)
            {
                var list:ArrayCollection = new ArrayCollection();
                for (var i:int=0; i<result.length; i++) 
                {
                    list.addItem(result[i]);
                }
                return list; 
            }
            else 
            {
                return null; 
            } 
        }
    ]]>
</fx:Script>
<s:List id="list" left="0" right="0" top="50" bottom="0" dataProvider="{myData} ">
    <s:itemRenderer>
        <fx:Component>
            <s:ItemRenderer>
                <fx:Script>
                    <![CDATA[
                        import spark.components.Label;
                        private function addItem(qtype:String):void
                        {

                            if (qtype == "1") {
                                icrHeading.visible = true;
                                ti.visible=false;
                                cb.visible=false;
                            }
                            else if (qtype == "2") {

                            }
                            else if (qtype == "3") {
                                icrDetail.visible=true;
                            }
                        }
                    ]]>
                </fx:Script>
                <s:VGroup id="contentHolder">

                </s:VGroup>

                <s:IconItemRenderer id="icr1" visible="false" x="0" width="50"
                                    label="{data.QuestionTypeID}"/> 
                <s:IconItemRenderer id="icrHeading" visible="false" x="0" width="450"
                                    label="{data.QuestionTitle}" color="0xff0000"/>
                <s:IconItemRenderer id="icrDetail" visible="false" x="50" width="450"
                                    label="{data.QuestionTitle}"/>
                <s:Label id="ilbl1" x="50" width="120" added="addItem(icr1.label.toString())"/>
                <s:TextInput id="ti" x="600" width="200" text=""/>
                <s:CheckBox id="cb" x="550">
                </s:CheckBox>
            </s:ItemRenderer>
        </fx:Component>
    </s:itemRenderer>
</s:List> 
<s:Button id="btn" x="717" y="10" label="{data}" click="navigator.popView()"/>

person Gavin Jones    schedule 21.09.2012    source источник
comment
Было бы полезно, если бы вы могли указать, что именно вы видите, что заставляет вас думать, что это не работает. Думаю, есть много решений этой проблемы.   -  person badunk    schedule 25.09.2012


Ответы (1)


Эта статья может помочь вам передавать данные между вашими представлениями. Обычно navigator.pushView принимает параметры

person badunk    schedule 24.09.2012