是否有更好的方法在组件及其渲染器之间传递数据(也称为方法)?
我正在使用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
,但我必须在渲染器内调用read并调用方法。
这很糟糕,我必须callLater
一直等待渲染器set data
执行,否则渲染器不会被回收并且为空。
是否有更高效,更漂亮的方式在渲染器和组件之间传输数据和调用函数?
P.S。是的,我已将数据传递给渲染器。我的渲染器处理相当复杂的逻辑。
答案 0 :(得分:0)
我以这种方式解决了与你类似的问题:
var goalPropDLRenderer:ClassFactory =
new ClassFactory(GoalPropagationDataListRenderer);
goalPropDLRenderer.properties = { isPropagationMode : isPropagationMode };
list.itemRenderer = goalPropDLRenderer;
其中:“list”是一个列表对象,我要设置一个项目渲染器;而不是设置项目渲染器内联(通过mxml在“列表”声明中),我已经使用了这种语法。这个代码是在“list”父的creationComplete上调用的(我认为有更好的地方)这样就可以将“properties”/“values”传递给渲染器。
在GoalPropagationDataListRenderer上我:
[Bindable]
public var isPropagationMode : Boolean;
由goalPropDLRenderer.properties = {isPropagationMode:isPropagationMode}填充;所以在渲染器中我可以毫无问题地访问isPropagationMode的值。
我希望它可以提供帮助。
答案 1 :(得分:0)
有一些方法,取决于你想要做什么(如果数据依赖于每一行,或者数据网格中的全局),但是就个人而言,我会避免使用callLater,你写道:(myList.dataGroup.getElementAt (myList.selectedIndex)为MyRenderer).doSomething(data)
你可以使用冒泡事件,然后在datagird(或任何时候)捕获它,然后通过myRenderer(event.target)获取渲染器,不需要使用getElementAt !,但questin是你何时派遣事件(我不知道细节)
如果您使用global(在datagrid含义中)逻辑:
我会创建一些将在数据网格和渲染器中设置的常见对象(称为逻辑)(在我看来,将逻辑从视图中分离出来是好的做法)
然后我会使用Claudio编写的解决方案(将属性设置为itemRenderer ClassFactory)来设置渲染器的逻辑