0

actionscriptを使用して高度なデータグリッドを作成しています。

VBoxオブジェクトを拡張するactionscriptクラスを作成しました。

パッケージコア{importmx.containers.VBox; import mx.controls.TextInput;

public class customItemRender extends VBox {public function customItemRender(_TextInput:TextInput、_TextInput2:TextInput){// TODO:関数super.addChild(_TextInput);を実装します。super.addChild(_TextInput2);
}}}

データグリッドでdeitemrenderプロパティを宣言すると、問題が発生します。

AdvancedDataGridColumn.itemRenderer = new ClassFactory(customItemRender(_TextInput1、_TextInput2));

コンパイラーは、customItemRenderをインスタンス化させません。

問題を解決するための代替ソリューションがあるかどうか誰かが知っていますか?

よろしくお願いします。

よろしくハビエル

4

3 に答える 3

2

プライベート var _ItemRendere:ClassFactory;

private function get MyItemRendere():ClassFactory
{
    if (_ItemRendere == null)
    {
        _ItemRendere = new ClassFactory();
        _ItemRendere.generator = customItemRender;
        _ItemRendere.properties = {
            _TextInput1:MY_TextInput1_OBJECT, 
            _TextInput2:MY_TextInput2_OBJECT
                };
    }
    return _ItemRendere;
 }

その後、使用できます

AdvancedDataGridColumn.itemRenderer = MyItemRendere;
于 2010-02-09T13:04:52.793 に答える
0

私は MXML を使用してこれを実行しようとしました。その場合、通常 IListItemRenderer インスタンスを mx:Component タグでラップする必要があります。これを行うときにプログラムで何が起こっているのか正確にはわかりませんが、うまくいきます。その理由は、itemRender が実際にはインスタンスではなく IFactory のインスタンスを探しているためです。そのため、独自の IFactory 実装を作成する必要がある AS を厳密に使用してこれを行うとします。

例えば

<mx:List>
 <mx:itemRenderer>
  <mx:Component>
   <mx:Text />
  </mx:Component>
 </mx:itemRenderer>
</mx:List>
于 2009-09-04T18:36:56.120 に答える
0

ClassFactory のコンストラクターには、インスタンスではなくクラスがパラメーターとして含まれています。電話する必要があります:

new ClassFactory(customItemRender);

ではない:

new ClassFactory(new customItemRender(_TextInput1,_TextInput2));

また:

new ClassFactory(customItemRender(_TextInput1,_TextInput2));

ここで、コンストラクターは TextInput1 と TextInput2 を参照して呼び出されないため、カスタム レンダラー自体で独自の TextInput をインスタンス化する必要があります。(ただし、これは良いことです。新しい customItemRender(_TextInput1, _TextInput2) を呼び出し続けると、2 つの TextInput は customItemRender の LAST インスタンスにのみ追加され、他のすべてにはこれら 2 つのオブジェクトがありません)。

于 2009-09-24T15:52:07.180 に答える