【问题标题】:What's the equivalent of this Flex MX code in Spark?Spark 中的这个 Flex MX 代码的等价物是什么?
【发布时间】:2011-07-08 05:18:54
【问题描述】:

spark 中的内联 itemRenderer 复选框元素的等价物是什么?

<mx:AdvancedDataGridColumn headerText="Eliminar" dataField="eliminar"  width="100" textAlign="center">
                    <mx:itemRenderer>
                        <fx:Component>
                            <mx:HBox horizontalAlign="center">
                            <mx:CheckBox id="chkEliminar" change="{data.eliminar = chkEliminar.selected}" selected="{data.eliminar}"/>
                            </mx:HBox>
                        </fx:Component>                     
                    </mx:itemRenderer>
                        </mx:AdvancedDataGridColumn>

【问题讨论】:

    标签: apache-flex flex-mx flex-spark


    【解决方案1】:

    内联 itemRenderer 在 spark 中的工作方式与在 Halo 中的工作方式相同。

    Spark 有自己的 CheckBox 组件 &lt;s:CheckBox&gt;,您可以使用,但您也可以继续使用示例中的 Halo CheckBox &lt;mx:CheckBox&gt;。

    【讨论】:

    • 问题是,如果我使用 spark 复选框,我使用的“数据”属性不再有效。
    • @overmann,这是真的。如果您必须使用内联 itemRenderers,我会坚持使用 Halo CheckBox。否则,请考虑创建一个实际的 ItemRenderer 组件。查看help.adobe.com/en_US/flex/using/… 了解更多信息。
    • +!对于您的答案的第一行。 “内联 itemRenderer 在 Spark 中的工作方式与在 Halo 中的工作方式相同。”如果您想使用 Spark 组件作为 MX 组件的渲染器,请参阅我的答案。
    • @Flextras,我在回复 overmann 的评论时也添加了更多信息。为您提供实际示例的答案+1。 :)
    【解决方案2】:

    为杰森的回答+1

    Inline itemRenderers work the same in spark as they did in Halo
    

    我会补充一点,如果你想在渲染器中使用 Spark 组件,那么你要么需要实现 IDataRenderer 接口,要么使用 itemRenderer 类。 More info here。我会像这样将您现有的 itemRenderer 重写为 Spark:

    <fx:Component>
    <s:ItemRenderer>
     <s:CheckBox id="chkEliminar" change="{data.eliminar = chkEliminar.selected}" selected="{data.eliminar}"/>
    </s:ItemRenderer>
    </fx:Component>   
    

    目前,我忽略了在 itemRenderer 中绑定被认为是一种不好的做法,您确实应该使用 dataChange 事件来修改选定的值。

    【讨论】:

    • @Flextras,出于好奇,为什么在 itemRenderer 中绑定被认为是不好的做法?不是批评,只是好奇。
    • @Jason Towne 众所周知,这会拖累性能。绑定是一项昂贵的操作。我认为它与绑定的工作方式以及如何将 MXML 转换为 ActionScript 有关。例如,使用 Flextras AutoComplete,我通过重写客户端的 itemRenderers 以不使用绑定来修复大多数“内存泄漏”投诉。
    • @Flextras,很高兴知道。感谢您的信息。
    【解决方案3】:

    这里的其他两个答案都适用于这种情况,其中只有一个子项,但是如果您希望 itemrenderer 具有像 HBox 这样的布局,则需要手动指定它:

    <s:itemRenderer>
      <fx:Component>
        <s:itemRenderer>
           <s:layout>
             <s:HorizontalLayout horizontalAlign="center"/>
           </s:layout>
           <mx:CheckBox id="chkEliminar" change="{data.eliminar = chkEliminar.selected}" selected="{data.eliminar}"/>
         </s:itemRenderer>
       </fx:Component>                     
     </s:itemRenderer>
    

    【讨论】:

    • 如果 HBox 只有一个子组件,为什么要使用它?太过分了。
    • @www.Flextras.com 因为如果他开始添加代码,这将与光环组件的行为相同。没有布局,渲染器意味着与 HBox 不同的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多