如何访问项呈示器中的父应用程序属性

时间:2012-11-04 21:09:34

标签: flex custom-component itemrenderer

我有一个datagrid,在主应用程序中有3列。在第三列中,我想使用项目渲染器,我想在其中使用hbox,其中包含两个组件。一个是按钮,一个是标签。我在主应用程序中也有一个滑块。我想使用滑块(使用数据网格)从主应用程序文件中更改itemrenderer按钮的alpha。我可以使用data属性访问项呈示器内的数据提供程序属性。但是如何访问父应用程序属性。为此我尝试创建自定义datagrid并使用数据绑定传递slider的值。但无法进入该物业。在我执行相同操作的列表中,我可以使用item renderer的listData属性访问该属性,但是在datagrid的情况下我无法访问该属性。

2 个答案:

答案 0 :(得分:1)

  

如何访问父应用程序属性

通常;我建议你不要。 itemRenderer应该能够通过数据元素访问它所需的所有属性;这与dataProvider有关。

在访问显示层次结构中较高的组件属性时,封装是一个中断。

也就是说,有很多方法可以解决这个问题。

要访问主应用程序,您可以使用FlexGlobals.topLevelApplication访问顶级应用程序。

您可以将滑块值存储为静态变量,并以这种方式从itemRenderer访问它。

您可以将滑块值存储在某些数据/模型对象中,并使用依赖注入框架(例如SwizRobotlegs)将该数据/模型对象注入到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显示了我所说的一个很好的例子。 我希望它会有所帮助。