Flex 3:作为项目编辑器的数据网格过早获得"itemEditEnd"



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

要做到这一点,我有一个函数分配为'itemEditBegin'(对于树)的处理程序,我在其中动态创建数据网格,然后使用弹出式管理器将其显示为(模态)弹出。到目前为止一切顺利。

但是,如果您单击任何地方(例如:在数据网格中向下滚动按钮),弹出窗口消失,因为itemEditEnd事件被触发-为什么?!

在另一个场景中,我将DateField设置为编辑器,用户可以单击图标以打开DateChooser,滚动月份等。我看了看这背后的代码,它是使用一个弹出窗口,似乎在我的代码完全相同的方式!

下面是'itemEditBegin'代码:

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

,其中'this'是树渲染器对一行使用的组件。它是树组件的"itemEditEnd"处理程序,一旦数据网格内的任何东西被点击(例如)就会被调用。一个行,向下滚动按钮,列分隔符等)。

有什么想法吗?

谢谢,

迈克。

我想我必须看到代码,或者在实践中工作才能完全理解。当您将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。

关于stoppropagation()的更多信息…还要检查stopimmediatepropagation()。我不确定您需要哪一个,因为这取决于您的代码的结构。

最终我找到了一个解决方案,可以更轻松地解决这个问题。只需添加一行:

dataGrid.owner = this;

解决了过早的itemEditEnd事件问题。然而,现在我有相反的问题,其中itemEditEnd事件不会被触发,直到我点击树的另一行!

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

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

谁有更好的主意?

谢谢,迈克

相关内容

  • 没有找到相关文章

最新更新