【问题标题】:Flex 3: Datagrid as item editor gets 'itemEditEnd' prematurelyFlex 3:作为项目编辑器的 Datagrid 过早地获得“itemEditEnd”
【发布时间】:2011-08-07 20:32:52
【问题描述】:

我的应用程序有一个带有自定义项目渲染器的树,它根据叶子上的数据类型使用不同的组件作为编辑器。在一种情况下,我正在尝试使用数据网格,以便用户可以选择满足他需要的行(需要显示几列),即。在概念上类似于 ComboBox。

为此,我将一个函数指定为“itemEditBegin”(用于树)的处理程序,在该处理程序中动态创建数据网格,然后使用弹出管理器将其显示为(模式)弹出窗口。到目前为止一切顺利。

但是,如果您单击任意位置(例如,数据网格中的向下滚动按钮),弹出窗口就会消失,因为触发了 itemEditEnd 事件 - 为什么?!

在另一种情况下,我将 DateField 设置为编辑器,用户可以单击该图标以调出 DateChooser、滚动月份等。我查看了其背后的代码,它使用的是弹出窗口,看起来和我的代码完全一样!

这里是“itemEditBegin”代码:

dataGrid = new DataGrid();
dataGrid.dataProvider = mddTable.dataCollection;
dataGrid.editable = false;
PopUpManager.addPopUp(dataGrid, this, true);

其中“this”是树渲染器用于一行的组件。只要单击数据网格中的任何内容(例如,行、向下滚动按钮、列分隔符等),就会调用树组件的“itemEditEnd”处理程序。

有什么想法吗?

谢谢,

迈克。

【问题讨论】:

    标签: apache-flex datagrid popup itemeditor


    【解决方案1】:

    我想我必须查看代码,或者在实践中才能完全理解。当您将 DataGrid 用作 itemEditor 时,听起来各个 DataGrid 列是可编辑的。那是对的吗?

    当您将焦点移出 DataGrid 中的 itemEditor 时,它将触发 itemEditEnd 事件。你的树必须以某种方式对此做出反应。尝试在 DataGrid 类中停止事件传播。概念上是这样的:

    <mx:DataGrid>
     <mx:Script>
       public function oItemEditEnd(event:DataGridEvent):void{
         event.stopPropogation();
       }
     </mx:Script>
     <mx:columns>
       <mx:DataGridColumn itemEditEnd="onItemEditEnd(event)">
       <mx:DataGridColumn itemEditEnd="onItemEditEnd(event)">
     </mx:columns>
    </mx:DataGrid>
    

    如果你这样做,你将不得不做一些事情来确定用户何时完成编辑并手动关闭 itemEditor。

    有关stopPropogation(). 的更多信息。另请查看stopImmediatePropogation()。我不确定您需要哪一个,因为这取决于您的代码的结构。

    【讨论】:

    • 您好,感谢您的回答。实际上这些列是不可编辑的 - 我在原始问题中添加了一些代码。只要单击数据网格中的任何内容,就会触发树的 itemEditEnd。顺便说一句,如果数据网格触发了“itemEditeEnd”事件,树会对此做出反应吗?干杯,迈克
    【解决方案2】:

    最终我找到了一个更能解决问题的解决方案。只需在行中添加:

    dataGrid.owner = this;
    

    解决了过早的 itemEditEnd 事件问题。但是,现在我遇到了相反的问题,直到我单击树的另一行时才会触发 itemEditEnd 事件!

    我在 datagrid 上有一个“item clicked”监听器,当单击其中一个值时会破坏 datagrid,但这样做不会导致底层树行的 itemEditEnd 事件触发。我在文档中读到组件失去焦点会导致它,所以我调度了我自己的“FocusEvent.FOCUS_OUT”事件 - 不好。

    如果我手动将焦点更改为底层树,itemEditEnd 事件会触发并且一切都很好,但是必须将树的引用传递给树渲染器的行对象似乎有点笨拙!

    谁有更好的想法?

    谢谢,

    迈克

    【讨论】:

      猜你喜欢
      • 2015-06-16
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2010-11-06
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多