0

コンポーネントとそのレンダラー (メソッドも呼び出す) の間でデータを渡すためのより良い方法はありますか? or or バブリング
を使用しています(状況によって異なります)。そして、そのコンポーネントでイベントをリッスンします。 dispatchEvent(new CustomEvent(CustomEvent.SOME_EVENT, data));owner.dispatchEvent(new CustomEvent(CustomEvent.SOME_EVENT, data));

データをレンダラーに渡すために、次を使用しています:
(myList.dataGroup.getElementAt(myList.selectedIndex) as MyRenderer).doSomething(data);または変更dataProviderしていますが、とにかくレンダラー内で callLater とメソッドを呼び出す必要があります。

これは最悪です。callLaterレンダラー関数が実行されるのを常に待つ必要set dataがあります。それ以外の場合、レンダラーはまだリサイクルされておらず、null です。

レンダラーとコンポーネント間でデータを転送し、関数を呼び出すためのより効率的できれいな方法はありますか?

PS はい、レンダラーにデータを渡しました。私のレンダラーは非常に複雑なロジックを処理します。

4

2 に答える 2

0

いくつかの方法がありますが、正確に何をしたいかによって異なります(データがすべての行に依存している場合、またはデータグリッドでグローバルである場合)が、個人的には、callLaterとこれを避けます:(myList.dataGroup.getElementAt(myList。 selectedIndex)as MyRenderer).doSomething(data)

バブリングイベントを使用して、それをdatagird(またはいつでも)でキャッチし、myRenderer(event.target)を介してレンダラーを取得できます。getElementAt!を使用する必要はありませんが、questinはいつイベントをディスパッチしますか(詳細はわかりません) )。

グローバル(データグリッドの意味で)ロジックを使用する場合:

  • データグリッドとレンダラーに設定されるいくつかの共通オブジェクト(ロジックと呼ばれる)を作成します(私の意見では、ロジックをビューから分離することはとにかく良い習慣です)

  • 次に、Claudioが作成したソリューション(プロパティをitemRenderer ClassFactoryに設定)を使用して、ロジックをレンダラーに設定します。

  • または、listDataオブジェクトを使用できます(ただし、それほど単純ではありません)
  • または、datagdid内のmxmlでアイテムレンダラーを作成する場合は、logic="{outerDocument.logic}"のようなouterDocumentを使用して簡単にバインドできます。
  • または、itemRendererの所有者プロパティを使用することもできるので、メソッドが必要なときはいつでも、MyDataGrid(owner).doSomeDataGridCalculationsForData(data)のように呼び出します。必要がない場合は、ロジックオブジェクトを作成する必要はありません。
于 2012-08-01T09:54:27.523 に答える
0

私はこの方法であなたに似た問題を解決しました:

var goalPropDLRenderer:ClassFactory = 
         new ClassFactory(GoalPropagationDataListRenderer);

goalPropDLRenderer.properties = { isPropagationMode : isPropagationMode };

list.itemRenderer = goalPropDLRenderer;

ここで: "list" は、アイテム レンダラーを設定する魔女のリスト オブジェクトです。アイテム レンダラーをインラインで設定する (mxml による「リスト」宣言で) 代わりに、この構文を使用しました。このコードは、「リスト」の父の creationComplete で呼び出されます (もっと良い場所があると思います)。このようにして、「プロパティ」/「値」をレンダラーに渡すことができます。

GoalPropagationDataListRenderer では、次のことを行いました。

[Bindable]
public var isPropagationMode : Boolean;

goalPropDLRenderer.properties = { isPropagationMode : isPropagationMode }; によって設定されます。そのため、レンダラー内で isPropagationMode の値に問題なくアクセスできます。

お役に立てば幸いです。

于 2012-07-30T13:53:01.880 に答える