0

有没有更好的方法在组件及其渲染器(也调用方法)之间传递数据?
我正在使用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函数执行,否则渲染器尚未回收并且为空。

有没有更高效、更漂亮的方式在渲染器和组件之间传输数据和调用函数?

PS 是的,我已经将数据传递给渲染器。我的渲染器处理相当复杂的逻辑。

4

2 回答 2

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 回答
0

有一些方法,取决于你到底想做什么(如果数据依赖于每一行,或者数据网格中的全局),但就个人而言,我会避免 callLater 和你写的这个:(myList.dataGroup.getElementAt(myList. selectedIndex) 作为 MyRenderer).doSomething(data)

您可以使用冒泡事件,然后在datagird(或任何时候)中捕获它,然后通过myRenderer(event.target)获取渲染器,不需要使用getElementAt!,但questin是您何时调度事件(我不知道细节)

如果您使用全局(在数据网格中)逻辑:

  • 我会制作一些通用对象(称为逻辑),这些对象将在数据网格和渲染器中设置(在我看来,将逻辑与视图分离是一种很好的做法)

  • 然后我将使用 Claudio 编写的解决方案(将属性设置为 itemRenderer ClassFactory)将逻辑设置为渲染器

  • 或者你可以使用 listData 对象(但它不是那么简单)
  • 或者,如果您在 datagdid 中的 mxml 中编写项目渲染器,则可以使用 externalDocument 轻松绑定它,例如 logic="{outerDocument.logic}"
  • 或者你可以只使用 itemRenderer 的 owner 属性,所以每当你想要一些方法时,调用 MyDataGrid(owner).doSomeDataGridCalculationsForData(data),如果你不想创建逻辑对象,则不需要
于 2012-08-01T09:54:27.523 回答