【问题标题】:how to access the parent application property inside item renderer如何访问项目渲染器中的父应用程序属性
【发布时间】:2012-11-04 21:09:34
【问题描述】:

我有一个在主应用程序中有 3 列的数据网格。在第三列中,我想使用项目渲染器,我想使用其中有两个组件的 hbox。一个是按钮,一个是标签。我在主应用程序中也有一个滑块。我想使用使用数据网格的滑块从主应用程序文件中更改 itemrenderer 按钮的 alpha。我可以使用数据属性访问项目渲染器中的数据提供者属性。但是如何访问父应用程序属性。为此,我尝试创建自定义数据网格并使用数据绑定传递滑块的值。但无法访问该属性。在我做同样事情的列表中,我可以使用项目渲染器的 listData 属性访问该属性,但在 datagrid 的情况下我不能这样做。

【问题讨论】:

    标签: apache-flex custom-component itemrenderer


    【解决方案1】:

    如何访问父应用程序属性

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

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

    也就是说,有很多方法可以做到这一点。

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

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

    您可以将滑块值存储在某个数据/模型对象中,并使用依赖注入框架(例如SwizRobotlegs)将该数据/模型对象注入您的 itemRenderer。

    【讨论】:

    • +1 因为你不应该这样做。我还要补充一点,您可以创建一个 ClassFactory 并使用它为渲染器提供对滑块的引用或反映其值的可绑定数据对象。
    • 我对使用 ClassFactory 发送属性有一个盲点。不知道为什么;我总是忘记它的存在。
    • @AmyBlankenship 如何使用 ClassFactory 访问父应用程序的属性。通过使用 listData 属性,我们可以实现相同的目标吗?几天前我用代码问过同样的问题。它的链接是stackoverflow.com/questions/13109821/…
    • @AmyBlankenship 我想我错了。我在网格列上使用渲染器。在这种情况下,渲染器的父级不是数据网格,而是网格列。该值被传递给数据网格而不是网格列。所以这可能是渲染器的 listData 为空的原因。在列表的情况下,我们将属性传递给列表,因此渲染器能够访问 listData 属性。如果我错了,请纠正我。
    • 我不知道,因为我觉得即使使用listdata也是孩子干涉父母的事情,我认为这不是好的做法。您可能会发现这解决了您的问题flexdiary.blogspot.com/2008/09/…
    【解决方案2】:

    如果要访问外部属性,可以在 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 是我所说的一个很好的例子。 我希望它会有所帮助。

    【讨论】:

    • 在我的情况下,渲染器在其他文件中。当用户拖动它时,我需要访问滑块的值。根据滑块的当前值,我想在设置数据函数中设置逻辑。
    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多