带有itemrenderer的Flex列表获得选定的值

时间:2012-09-21 09:49:54

标签: flex flex-mobile

我有一个Flex移动应用,目前包含2个视图

View 1有一个数据绑定列表,它使用itemRenderer显示ID和A Label 视图2显示数据绑定列表,该列表使用itemRenderer根据数据集的内容显示控件。

所有数据都保存在SQLite数据库中。

查看1是调查列表 视图2是与每项调查相关的问题列表。

我正在努力将调查ID值传递给视图2中的SQL查询,以便返回的数据是与每次调查相关的问题。

我已经遍历了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()"/>

1 个答案:

答案 0 :(得分:0)

article可以帮助您在视图之间传递数据。基本上,navigator.pushView接受参数