- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将尝试找出将 ComboBox 嵌入到 Flex (3.4) DataGrid 中的“正确”方法。根据权利(例如,根据本页 http://blog.flexmonkeypatches.com/2008/02/18/simple-datagrid-combobox-as-item-editor-example/ ),这应该很容易,但我一生都无法完成这项工作。
与上面链接的示例的区别在于,我的显示值(用户看到的值)与我想要选择并存储在数据提供程序中的 id 值不同。
所以我所拥有的是:
<mx:DataGridColumn headerText="Type" width="200" dataField="TransactionTypeID" editorDataField="value" textAlign="center" editable="true" rendererIsEditor="true">
<mx:itemRenderer>
<mx:Component>
<mx:ComboBox dataProvider="{parentDocument.transactionTypesData}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
其中transactionTypesData
同时具有“data”和“label”字段(根据ComboBox
- 为什么它不提供labelField和idField我永远不会知道)。
无论如何,上面的 MXML 代码在以下两种情况下不起作用:
那么,有人遇到过类似的情况吗?
最佳答案
虽然 Jeff 的回答是对此方法的部分回答(请参阅 http://flex.gunua.com/?p=119 以获取使用此方法取得良好效果的完整示例),但它并不像我想要的那么普遍。
值得庆幸的是,我终于在 Experts Exchange 上找到了一些很大的帮助。 (hobbit72 的回答)描述了如何创建一个在网格中作为 ItemRenderer 工作的自定义组件。我已经扩展了该代码,也支持使用组合框作为 ItemEditor。完整组件如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox
xmlns:mx="http://www.adobe.com/2006/mxml"
dataChange="setSelected()"
change="onSelectionChange(event)"
focusEnabled="true">
<mx:Script>
<![CDATA[
import mx.events.DataGridEvent;
import mx.events.ListEvent;
import mx.controls.dataGridClasses.DataGridListData;
private var _ownerData:Object;
private var _lookupField:String = "value";
// When using this component as an itemEditor rather than an itemRenderer
// then set ' editorDataField="selectedItemKey"' on the column to
// ensure that changes to the ComboBox are propogated.
[Bindable] public var selectedItemKey:Object;
public function set lookupField (value:String) : void {
if(value) {
_lookupField = value;
setSelected();
}
}
override public function set data (value:Object) : void {
if(value) {
_ownerData = value;
setSelected();
}
}
override public function get data() : Object {
return _ownerData;
}
private function setSelected() : void {
if (dataProvider && _ownerData) {
var col:DataGridListData = DataGridListData(listData);
for each (var dp:Object in dataProvider) {
if (dp[_lookupField] == _ownerData[col.dataField]) {
selectedItem = dp;
selectedItemKey = _ownerData[col.dataField];
return;
}
}
}
selectedItem = null;
}
private function onSelectionChange (e:ListEvent) : void {
if (selectedItem && _ownerData) {
var col:DataGridListData = DataGridListData(listData);
_ownerData[col.dataField] = selectedItem[_lookupField];
selectedItemKey = selectedItem[_lookupField];
}
}
]]>
</mx:Script>
</mx:ComboBox>
使用该组件非常简单。作为 ItemRenderer:
<mx:DataGridColumn headerText="Child" dataField="PersonID" editable="false" textAlign="center">
<mx:itemRenderer>
<mx:Component>
<fx:GridComboBox dataProvider="{parentDocument.childrenData}" labelField="Name" lookupField="PersonID" change="dispatchEvent(new mx.events.DataGridEvent(mx.events.DataGridEvent.ITEM_FOCUS_OUT, true, true))"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
使用该组件非常简单。作为 ItemEditor:
<mx:DataGridColumn labelFunction="lookupChildName" headerText="Child" dataField="PersonID" editable="true" editorDataField="selectedItemKey">
<mx:itemEditor>
<mx:Component>
<fx:GridComboBox dataProvider="{parentDocument.childrenData}" labelField="Name" lookupField="PersonID" change="dispatchEvent(new mx.events.DataGridEvent(mx.events.DataGridEvent.ITEM_FOCUS_OUT, true, true))"/>
</mx:Component>
</mx:itemEditor>
</mx:DataGridColumn>
请注意,将其用作 ItemEditor 时,必须使用自定义 labelFunction(在我的情况下从 PersonID 查找名称),否则您只能在未编辑字段时在网格中看到键(如果您的键/值相同,则不是问题)。
请注意,就我而言,我希望传播项目焦点事件以向用户提供即时反馈(我的 DataGrid 有 itemFocusOut="handleChange()"
),因此 change
事件创建 ITEM_FOCUS_OUT 事件。
请注意,如果您不介意仅在用户单击要编辑的单元格时显示组合框,则可能有更简单的方法将组合框用作项目编辑器。我想要的方法是一种在 DataGrid 中显示所有行的组合框的通用方法,并且可编辑且具有良好的事件传播功能。
关于datagrid - Flex DataGrid 与 ComboBox itemRenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1408729/
我有一个项目渲染器,我想更改以下默认颜色: 上面代码中的样式没有效果。 我还尝试将
我在某处听说或读到,出于性能原因,应该避免使用 itemRendererFunction,但由于我找不到该评论的来源,是否可能是文档中的示例代码效率低下?我创建了一个我认为效率更高的替代代码示例(尚未
我正在尝试从自定义 ItemRenderer 调度自定义事件 这是我的自定义事件 package events { import customClass.Product; import
我想从 itemRenderer 调用名为“edit_groups()”的父函数。 我的 itemRenderer 的代码是: 我从一个应用程序调用我的 it
我们正在调整我们的 Intranet Web 应用程序以符合 WCAG 2.0。该应用程序具有复杂控件列表,但我无法读取屏幕以读取列表中的任何内容,但 labelDisplay 或列表的 labelF
我有一个 Spark 列表控件,其数据是使用 itemrenderer 呈现的。基本上,项目渲染器在面板中布置数据。 Panel 有一个 LinkButton,单击它时需要将 Id 传递给父应用程
在使用 MXAdvancedDataGridItemRenderer 的 AdvancedDataGrid 中,鼠标悬停未传递到 AdvancedDataGrid。 经过几天的奋斗,我想分享一下:在您
在一个 Flex Mobile 项目中,我有一个简单的 itemRenderer,我试图在其中创建一个“气泡”短信效果,类似于 ichat 或 iphone(只是为了让您明白我想要什么)。但是,如果文
我想要完成的工作是让我的 Flex Datagrid 中的财务数据进行颜色编码——如果是肯定的,则为绿色;如果是负数,则为红色。如果我想要着色的列是 dataProvider 的一部分,这将相当简单。
我正在使用 ItemRenderer 将项目数组绑定(bind)到数据网格。我使用 data 变量来控制可绑定(bind)数据。我还有 someComponentVariable 需要插入到每一行中,
我有一个简单的问题,但首先我描述了场景: 刚刚编写了我的第一个 ItemRenderer 用于测试假设。我在我的应用程序中获得了一个用户 ListView ,并在其上的数据提供者中声明了一些对象。在
在我设计为 100% 缩放到 Web 窗口的 flex 项目中,我有一个 Spark 列表。我有一个简单的 itemrenderer,它接收数据并显示名称和消息。把它想象成一个简单的即时通讯显示。问题
我有一个数据网格,它在 cloumn 中有一个复选框项目渲染器以允许行选择: 主要应用: 元素渲染器: 如何获得项目渲染器/复选框的句柄,以便我可以确定检查哪些行? 最佳答案 提
我将尝试找出将 ComboBox 嵌入到 Flex (3.4) DataGrid 中的“正确”方法。根据权利(例如,根据本页 http://blog.flexmonkeypatches.com/200
如何访问 List itemRenderer 及其属性 (Spark - Flex 4)?我想遍历列表并做类似的事情(注意它是伪代码): for (var i=0;i
在编写自定义 itemRenderer 时,如何引用将在其中呈现的网格单元格的高度和宽度?以这样一种方式,它会在调整网格大小时正确调整大小。 我正在编写一个 dataGrid itemRenderer
假设我想在 ListView 的项目中使用以下布局:
当涉及到 flex itemrenderers 时,我似乎缺少一些关键概念,特别是当它适用于 AdvancedDataGrid 时。我正在做很多其他人正在尝试做的事情:根据行中的数据更改字段的 bg
我目前正在使用 flex sdk 4.5(但它与 4.1 相同)并且我有以下问题: 我将 ItemRenderer 的当前状态绑定(bind)到外部对象。该对象通过 Robotlegs 注入(inje
我有一个使用自定义 ItemRenderer 的列表。所有者(列表)有没有办法将我创建的自定义事件分派(dispatch)给它的 ItemRenderer 的所有实例? 例如,我想调度一个将文本添加到
我是一名优秀的程序员,十分优秀!