今天在对DataGrid的进行数据编辑是利用渲染器加入了TextInput空间,但是只要点中就会出现
scroll的焦点获取失败即:
有一个困扰多时的问题: flex4,spark组件的 datagrid的itemrenderer中使用textinput组件,鼠标点击后报错: TypeError: Error #1009: 无法访问空对象引用的属性或方法。 at spark.components::Scroller/focusInHandler() at flash.display::Stage/set focus() at flashx.textLayout.container::ContainerController/http://ns.adobe.com/textLayout/internal/2008::setFocus() at flashx.textLayout.container::ContainerController/mouseDownHandler() at flashx.textLayout.container::TextContainerManager/mouseDownHandler() at spark.components.supportClasses::RichEditableTextContainerManager/mouseDownHandler() at flashx.textLayout.container::ContainerController/http://ns.adobe.com/textLayout/internal/2008::requiredMouseDownHandler() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.core::UIComponent/dispatchEvent() at mx.managers::SystemManager/mouseEventHandler()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\SystemManager.as:2918]
一开始以为是DataGrid的原因各种查找,虽然也利用这个查找过程学会了很多DataGrid的知识但是结果,
却和DataGrid无关的,是PopUpAnchor的问题,
我这个DataGrid是PopUp弹出的,最外层使用的是Group但是group没有实现mx.managers.IFocusManagerContainer这个接口,对于这个接口官方说明是:
The IFocusManagerContainer interface defines the interface that containers implement to host a FocusManager. The PopUpManager automatically installs a FocusManager in any IFocusManagerContainer it pops up.
就是实现了这个接口的容器,PopUpManager会自动注入一个FocusManager实例进去,但是坑爹事Group并没有实现,而且Group是渲染器和其他的组件最常用的容器,所以会报出如果获取FocusManager 即 focusManager=null,只需改成实现了IFocusManagerContainer这个接口的容器就可以了,这里我用的
BorderContainer,改了之后就不会再报错了,坑爹的玩意啊