Spark List会荣誉iDropineTemrenderer界面吗?
-
14-10-2019 - |
题
似乎新的火花列表组件并不荣幸 IDropInItemRenderer
界面。
IE-如果我实施 IDropInItemRenderer
在我的渲染器上 listData
从来没有叫过。
我是否缺少某些东西,还是现在不弃用这个界面?
如果是这样,向渲染器提供类似的DataProvider上下文信息的建议方法是什么?
例如,我希望集合中的最后一项渲染器的行为略有不同。
我看到 IItemRenderer
现在定义一个 listIndex
属性,但是,这种方法在不知道源数据的计数的情况下不起作用。
解决方案
这是我最终使用的解决方法。
以自己的方式 DataGroup
正在滴落火花的构图良好,因为它暴露了一个 rendererUpdateDelegate
属性,您可以使用自己的课程设置,以提供您追求的任何自定义功能。
虽然界面下降而没有真正被广告宣传令人沮丧,但这种方法更加强大。
这是一个示例课。在我的示例中,我希望最后一个渲染器拥有它 collapsable
属性设置为 false
:
/**
* Decorates another IItemRendererOwner (eg., a DataGroup) and augments the updateRenderer method
* to set the isCollapsable property */
public class ThreadMessageRendererUpdateDelegate implements IItemRendererOwner
{
private var _dataGroup:DataGroup;
public function get dataGroup():DataGroup
{
return _dataGroup;
}
public function set dataGroup(value:DataGroup):void
{
_dataGroup = value;
if (dataGroup)
{
dataGroup.rendererUpdateDelegate = this;
}
}
public var dataProvider:ArrayCollection;
public function ThreadMessageRendererUpdateDelegate(owner:DataGroup=null)
{
this.dataGroup = owner;
}
public function itemToLabel(item:Object):String
{
return dataGroup.itemToLabel(item);
}
public function updateRenderer(renderer:IVisualElement, itemIndex:int, data:Object):void
{
dataGroup.updateRenderer(renderer,itemIndex,data);
if (renderer is ThreadMessageRenderer)
{
ThreadMessageRenderer(renderer).collapsable = itemIndex < dataProvider.length - 1;
}
}
}
这就是示例用法:
<fx:Declarations>
<viewer:ThreadMessageRendererUpdateDelegate dataProvider="{dataProvider}" dataGroup="{threadList}" />
</fx:Declarations>
<fx:Script>
<![CDATA[
[Bindable]
public var dataProvider:ArrayCollection
]]>
</fx:Script>
<s:DataGroup height="100%"
width="100%"
dataProvider="{dataProvider}"
itemRenderer="ThreadMessageRenderer"
id="threadList"
>
</s:DataGroup>
其他提示
男人!只是花了很长时间试图找到 DataGroup.rendererUpdateDelegate(...)
, ,最终发现我为什么不能这样做。
无论如何,考虑(消失) rendererUpdateDelegate
财产和您提供的更多东西,我意识到这也不是真正必要的。
DataGroup
有 rendererAdd
事件为您提供足够的信息,可以在适当的时间做您想做的事;例如:
...
<s:DataGroup id="dg"
dataProvider="{model.dataProvider}"
itemRenderer="{model.itemRendererFactory}"
rendererAdd="model.updateRenderer(event.data, event.index, event.renderer)">
...
...在 model
我们有:
public function updateRenderer(data:Object, index:int, renderer:IVisualElement):void
{
if (renderer is ICollapsable)
{
ICollapsable(renderer).collapse = index < dataProvider.length - 1;
}
}
较少的代码和更清晰的意图
不隶属于 StackOverflow