SQLite в справке Flex - PullRequest
       17

SQLite в справке Flex

0 голосов
/ 05 августа 2011

Я пытаюсь получить что-нибудь от моего SQLite для рендеринга во Flex, и я не могу понять, как отображать любые данные, даже текст, во Flex. Что я делаю не так?

    <fx:Script>
    <![CDATA[
        import flash.data.SQLConnection;
        import flash.data.SQLResult;
        import flash.data.SQLStatement;
        import flash.filesystem.File;

        import mx.collections.ArrayCollection;

        private var conn:SQLConnection;
        private var createStmt:SQLStatement;
        private var selectStmt:SQLStatement;
        [bindable] public var dataField:ArrayCollection;
        [bindable] private var row:Object;
        [bindable] private var pngIndex:int; 
        [bindable] public  var pngTitle:String; 
        [bindable] private var pngByteArray:ByteArray; 
        [Bindable] private var dp:ArrayCollection = new ArrayCollection();

        private function init():void
        {
            conn = new SQLConnection();
            conn.addEventListener (SQLEvent.OPEN, openSuccess);
            conn.addEventListener (SQLErrorEvent.ERROR, openFailure);

            var dbFile:File = File.applicationDirectory.resolvePath("assets/NM.sqlite");
            conn.openAsync(dbFile);
        }

        private function openSuccess(event:SQLEvent):void
        {
            conn.removeEventListener(SQLEvent.OPEN, openSuccess);
            conn.removeEventListener(SQLErrorEvent.ERROR, openFailure);

            getData();
        }


        private function getData():void
        {
            //status = "Loading data";

            selectStmt = new SQLStatement();
            selectStmt.sqlConnection = conn;
            var sql:String = "SELECT Title FROM Data WHERE 'Index' = 0";
            selectStmt.text = sql;

            selectStmt.addEventListener(SQLEvent.RESULT, selectResult);
            selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError);

            selectStmt.execute();
        }

        private function selectResult(event:SQLEvent):void
        {
            //status = "Data loaded";

            selectStmt.removeEventListener(SQLEvent.RESULT, selectResult);
            selectStmt.removeEventListener(SQLErrorEvent.ERROR, selectError);

            [bindable] var result:SQLResult = selectStmt.getResult(); 
            dataField = new ArrayCollection(result.data);
            dp = ArrayCollection(dataField);

            if (dataField != null) {
                pngIndex = result.data.Index;
                pngTitle = result.data.Title;
                pngByteArray = result.data.Picture; 

                /* Pic.source = pngByteArray; */

            }

        }

    ]]>
</fx:Script>
<s:List x="31" y="44" width="511" height="415" dataProvider="{dp}"></s:List>

Я пробовал несколько различных компонентов, и я не могу заставить данные правильно связываться (хотя в этом коде, наконец, нет страшного) Привязка данных не сможет обнаружить назначения .. . ", или другое страшное сообщение" Свойство не определено ").

Пожалуйста, помогите!

1 Ответ

1 голос
/ 08 августа 2011

Исправлено.

<fx:Script>
    <![CDATA[
        import flash.data.SQLConnection;
        import flash.data.SQLResult;
        import flash.data.SQLStatement;
        import flash.filesystem.File;

        import mx.collections.ArrayCollection;

        private var conn:SQLConnection;

        private function init():void
        {
            conn = new SQLConnection();
            conn.addEventListener(SQLEvent.OPEN, openSuccess);
            conn.addEventListener(SQLErrorEvent.ERROR, openFailure);
            var dbFile:File = File.applicationDirectory.resolvePath("assets/NM.sqlite");
            conn.openAsync(dbFile);
        }

        private function openSuccess(event:SQLEvent):void
        {
            conn.removeEventListener(SQLEvent.OPEN, openSuccess);
            conn.removeEventListener(SQLErrorEvent.ERROR, openFailure);
            getData();
        }

        private function getData():void
        {
            var select:SQLStatement = new SQLStatement();
            select.sqlConnection = conn;
            select.text = "SELECT Title FROM Data WHERE 'Index' = 0";
            select.addEventListener(SQLEvent.RESULT, selectResult);
            select.addEventListener(SQLErrorEvent.ERROR, selectError);
            select.execute();
        }

        private function selectResult(event:SQLEvent):void
        {
            var result:SQLResult = event.currentTarget.getResult(); 
            if(result.data)
            {
                list.dataProvider = new ArrayCollection(result.data);
            }
        }

    ]]>
</fx:Script>
<s:List id="list" x="31" y="44" width="511" height="415" labelField="Title" />

Я также рекомендую прочитать подробнее о том, как Flex работает со списками и средствами визуализации элементов.Было много проблем с этим кодом (т. Е. result.data.Index; неверно, поскольку data является массивом).Из того, что я могу почерпнуть, вам понадобится средство визуализации пользовательских элементов.Кроме того, я не рекомендую использовать Binding, если он вам не нужен (как в этом примере), поскольку он требует дополнительных ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...