0

これらは、同じアプリケーションの下にあるスクリプトです。最初のスクリプトはアプリケーションの下にあり、2 つ目は dataGrid の下にあります。最初のスクリプトから outerClick() まで、itemrenderer の inner() 関数にアクセスしています。さて、outerDocument オブジェクトによって innerClick() から関数 outer() に簡単にアクセスできますが、outerClick() 関数から itemrenderer の inner() 関数にアクセスするには what_to_use を使用します。mx:component id"" と class="" を試しましたが、itemrenderer の下の関数を識別できません。

  <mx:Script>
    <![CDATA[

        public function outer():void{
            Alert.show("Hi i am outer object");
            }
        public function outerClick():void{
            what_to_use.inner();
        }
    ]]>
</mx:Script>

この下のアイテムは、データ グリッドの下にレンダリングされます。

<s:itemRenderer>
        <mx:Component>
            <s:GridItemRenderer>
                <fx:Script>
                    <![CDATA[
                            public function innerClick():void{
                                outerDocument.outer();
                            }
                            public function inner():void{
                                Alert.show("Hi i am inner");
                            }
                    ]]>
                </fx:Script>
                    <s:CheckBox id="sel" selected="{data.checked=sel.selected}" change="{data.checked}" click="innerClick()"/>                                  
            </s:GridItemRenderer>
        </mx:Component>
    </s:itemRenderer>
4

1 に答える 1

3

「outerdocument」オブジェクトを使用してレンダリングされたアイテムから外部関数にアクセスできる場合、外部から内部関数にアクセスできませんか?

itemRenderers とは何かについて明確な誤解があるようです。itemRenderer はコンポーネント定義であり、独自のクラスを作成するようなものです。「outerDocument」参照を使用しているため、インライン/別のクラスに埋め込まれた独自のクラスを作成しています。

カスタム itemRenderer クラスのインスタンスは、List ベースのクラスのすべての表示項目に対して作成されます。したがって、独自のクラスが複数回作成されます。つまり、itemRenderer 関数のインスタンスが複数あることを意味します。Flex はどの itemRenderer インスタンスに対して関数を呼び出したいかをどのように知るのでしょうか? 実際、それはできません。

そのため、呼び出すことはできますが、呼び出すことはできません。

itemRenderer 内で変更を行う必要がある場合は、dataProvider のデータ要素を変更して行う必要があります。

すべての意図と目的のために、outerDocument も使用しないことをお勧めします。カプセル化の中断です。コンポーネントは、その親にアクセスしようとすべきではありません。これは、コンポーネントに不要な依存関係をもたらし、再利用を制限することが多いためです。「通信」する適切な方法は、itemRenderer からイベントをディスパッチし、親クラスでそれをリッスンすることです。

この概念は、以前の質問の 1 つに対する回答で簡単に説明されています。

于 2012-08-27T12:56:48.997 に答える