2011-08-05 5 views
0

私はFlexでレンダリングするためにSQLiteからanytihngを取得しようとしていますが、フレックス内にテキスト(テキストも含む)を表示する方法を理解できません。私は間違って何をしていますか?フレックス内のSQLite

<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> 

は、私は別の構成要素の数を試みた、と私は、このコードが最終的に検出することができません結合恐ろしい」データを持っていませんが(適切にバインドするためにデータを取得するように見えることはできません代入を... "メッセージ、または他の恐ろしい"プロパティ未定義 "メッセージ)。

助けてください!

+0

'dp'の代わりに' list'の 'dataProvider'に' dataField'をバインドしてみてください。 – NoobsArePeople2

+0

私はそれを試みると、 "データバインディングは 'dataField'への代入を検出できません。 もう1つの一般的なお気に入りは1067です:暗黙の強制。アー。 – SQLiteNoob

+0

'[bindable]'のすべてのインスタンスは '[Bindable]'である必要があります。 – NoobsArePeople2

答えて

1

固定。

<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がどのように機能するかについて詳しく読むことをお勧めします。このコードには多くの問題がありました(dataは配列なのでresult.data.Index;が間違っています)。私が集めることから、カスタムアイテムレンダラーが必要になります。さらに、余分なリソースが必要となるため、(この例のように)必要がなければBindingを使用することはお勧めしません。

+0

私が投稿したコードはちょうどワークシートでした - 私はresult.dataを知っています。インデックスは私が欲しいもののための適切な構文ですが、すべてがうまく見えたので、私は髪を引っ張っていました。私が最初に欠けていた方法を見つけました。 そして、私はあなたにバインディングについて聞いています。 – SQLiteNoob

関連する問題