我有一个datagrid,在主应用程序中有3列。在第三列中,我想使用项目渲染器,我想在其中使用hbox,其中包含两个组件。一个是按钮,一个是标签。我在主应用程序中也有一个滑块。我想使用滑块(使用数据网格)从主应用程序文件中更改itemrenderer按钮的alpha。我可以使用data属性访问项呈示器内的数据提供程序属性。但是如何访问父应用程序属性。为此我尝试创建自定义datagrid并使用数据绑定传递slider的值。但无法进入该物业。在我执行相同操作的列表中,我可以使用item renderer的listData属性访问该属性,但是在datagrid的情况下我无法访问该属性。
答案 0 :(得分:1)
如何访问父应用程序属性
通常;我建议你不要。 itemRenderer应该能够通过数据元素访问它所需的所有属性;这与dataProvider有关。
在访问显示层次结构中较高的组件属性时,封装是一个中断。
也就是说,有很多方法可以解决这个问题。
要访问主应用程序,您可以使用FlexGlobals.topLevelApplication访问顶级应用程序。
您可以将滑块值存储为静态变量,并以这种方式从itemRenderer访问它。
您可以将滑块值存储在某些数据/模型对象中,并使用依赖注入框架(例如Swiz或Robotlegs)将该数据/模型对象注入到itemRenderer中。
答案 1 :(得分:1)
如果要访问外部属性,可以在itemRenderer中使用 outerDocument ,例如:
//代码
public var str:String = "Test";
[Bindable] private var arr:Array = [
{field:'ROW1'},
{field:'ROW2'},
{field:'ROW3'}
];
// MXML
<mx:DataGrid id="grid" width="100%" height="100%" dataProvider="{arr}">
<mx:columns>
<mx:DataGridColumn dataField="field">
<mx:itemRenderer>
<mx:Component>
<mx:Label text="{data.field + ' ' + outerDocument.str}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
这URL显示了我所说的一个很好的例子。 我希望它会有所帮助。