0

sqlite からデータを正常に受信しました。トレース機能にデータが表示されていることがわかりますが、これらのデータを正しく表示するのに問題があります。オブジェクトのバインドと関係があると思います。私はどこかで何かが欠けているに違いないので、間違っているところを修正してください。また、この質問は実際にはAdobe Airの続きです:グループ化されたコンポーネントをドラッグアンドドロップします

とにかく、ここに私のItemRendererがあります:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                autoDrawBackground="true">

    <fx:Script>

        [Bindable]
        public var tree:TreeClass_Full;

        [Bindable]
        public var dataText:String = "empty";

        public function setTest():void{
            resultTextArea.text = "AAA";
        }
    </fx:Script>
    <s:HGroup x="5" y="5" width="350" height="150" horizontalAlign="center" verticalAlign="middle">
        <mx:Image id = "resultImage" width="100" height="100"/>
        <s:TextArea id="resultTextArea" height="141" editable="false"
                    text = "{tree.Common_Name}"/>
    </s:HGroup> 
</s:ItemRenderer>

sqlite クエリが成功した後に呼び出される関数は次のとおりです。

[Bindable]
public var dragDropLeft:ArrayCollection = new ArrayCollection();
[Bindable]
public var dragDropRight:ArrayCollection = new ArrayCollection();

protected function ResultFill():void
{
    // TODO Auto-generated method stub
    if (arr != null){
        for (var i:int = 0; i < arr.length; ++i){
            var tc:TreeClass_Full = arr[i];
            var rr:resultRenderer = new resultRenderer();
            rr.tree = tc;
            trace("--Common Name:" + tc.Common_Name);               

            rr.dataText = tc.Common_Name;
            rr.resultImage.source = tc.Picture1;
            rr.resultTextArea.text = tc.Common_Name;

            trace("----Common Name:" + rr.resultTextArea.text);

            dragDropLeft.addItem(rr);

        }
    }
}

sqlite クエリが成功すると、上記の関数が呼び出されます。ここで、オブジェクト (sqlite の ItemClass) の情報を ItemRenderer に入れます。

私の ItemRenderer には、Image と TextArea の 2 つのコンポーネントがあります。sqlite には、Image に使用されるそれぞれのイメージが含まれています。TextArea の場合、データベースからのすべての表示可能なテキストがそこに配置されます。つまり、データベースの複数のフィールドからの文字列がすべてそこにまとめられます。(しかし、今のところ、Common_Name という 1 つのフィールドだけが必要です)

その後、これらの ItemRenderer をリスト (この場合は dragDropLeft) に追加します。ただし、データはプログラムに表示されません。それでも、トレース機能はテキストを正しく出力します。

私はいくつかのことを試しましたが、いくつかのコードをそのまま残しましたが、それらはすべて同じ結果をもたらします: TextArea 内のテキストはまったく変更されません。ここで私は何を忘れましたか?

更新

このコードは、Bindable ArrayCollection を使用した場所をカバーしています。

        <s:HGroup width="100%" height="85%" verticalAlign="middle">
            <s:List dataProvider="{dragDropLeft}" width = "45%" height = "95%"
                    dragEnabled="true" dragMoveEnabled="true" dropEnabled="true"
                    itemRenderer="resultRenderer"/>
            <s:List dataProvider="{dragDropRight}" width = "45%" height = "95%" 
                    dragEnabled="true" dragMoveEnabled="true" dropEnabled="true" 
                    itemRenderer="resultRenderer"/>
        </s:HGroup>

基本的に、sqlite から値を与えることで自分の ItemRenderer を操作しようとしましたが、コメンテーターの 1 人から、これは正しくないようです。では、どうすればよいのでしょうか。リストに追加される ItemRenderer オブジェクトにデータを送信するにはどうすればよいでしょうか?

4

1 に答える 1

2

コメントで言ったように: リストはコンテナではありません。子を追加することはできません。にデータ オブジェクトを追加する必要がありますdataProvider。基本的に、ResultFillメソッド全体を次のように縮小する必要があります。

dragDropLeft.dataProvider = new ArrayCollection(arr);

このデータを表す ItemRenderers は、List コンポーネントによって内部的に作成されます。カスタム ItemRenderer 内で、dataプロパティを介してこのデータにアクセスできるようになったため、次のようになります。

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                autoDrawBackground="true">

     <s:HGroup x="5" y="5" width="350" height="150" 
              horizontalAlign="center" verticalAlign="middle">
         <s:Image source="{data.Picture1}" width="100" height="100"/>
        <s:TextArea text="{data.Common_Name}" height="141" editable="false" />
     </s:HGroup> 
</s:ItemRenderer>

TreeClass_Fullのプロパティはbindableこの例のものであると想定していることに注意してください。

于 2012-05-15T08:28:47.443 に答える