`

FLEX:Nested Object & Nested Data Grid

    博客分类:
  • FLEX
阅读更多
Flex Nested Object & Nested Data Grid:
http://natescodevault.com/2008/10/11/nested-data-grid/



在使用flex时,如果一个vo的属性是另一个vo,在datagrid中做数据展现时,可以使用 vo1.vo2.somepro去展现数据;但在做基于该内联字段的排序时,会出现问题。该问题通过重写DataGridColumn的deriveComplexColumnData和complexColumnSortCompare方法,修改flex的代码,可以得到解决。但后来发现,尽管使用该方法后,可以做基于内联对象属性的排序了,但在对datagrid的dataProvider(一个arrayCollection)做getItemIndex(也包括removeItemAt/addItemAt等,内部是调用了getItemIndex的)时,会出现另一个bug:
查找条件必须至少包含一个排序域值
Find criteria must contain at least one sort field value
Error: 查找条件必须至少包含一个排序域值。
	at mx.collections::Sort/findItem()[E:\dev\4.x\frameworks\projects\framework\src\mx\collections\Sort.as:541]
	at mx.collections::ListCollectionView/getItemIndex()[E:\dev\4.x\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:652]
	at com.bcia.fids.ops.depf::FidsDepf/delFidsDepfInGridResult()[D:\FIDS\flexsrc\FidsFlex\src\com\bcia\fids\ops\depf\FidsDepf.mxml:233]
	at com.bcia.fids.ops.depf::FidsDepf/messageHandler()[D:\FIDS\flexsrc\FidsFlex\src\com\bcia\fids\ops\depf\FidsDepf.mxml:187]
	at com.bcia.fids.ops.depf::FidsDepf/flexMessageResultHandler()[D:\FIDS\flexsrc\FidsFlex\src\com\bcia\fids\ops\depf\FidsDepf.mxml:316]
	at com.bcia.fids.ops.depf::FidsDepf/___FidsDepf_Operation17_result()[D:\FIDS\flexsrc\FidsFlex\src\com\bcia\fids\ops\depf\FidsDepf.mxml:50]
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:\dev\4.x\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:249]
	at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E:\dev\4.x\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:318]
	at mx.rpc::Responder/result()[E:\dev\4.x\frameworks\projects\rpc\src\mx\rpc\Responder.as:56]
	at mx.rpc::AsyncRequest/acknowledge()[E:\dev\4.x\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:84]
	at NetConnectionMessageResponder/resultHandler()[E:\dev\4.x\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:547]
	at mx.messaging::MessageResponder/result()[E:\dev\4.x\frameworks\projects\rpc\src\mx\messaging\MessageResponder.as:235]
如在datagrid中使用nested object无法排序一样,这也是flex的一个bug:
http://stackoverflow.com/questions/5895483/flex-find-criteria-must-contain-at-least-one-sort-field-value
http://bugs.adobe.com/jira/browse/SDK-23643?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel
https://bugs.adobe.com/jira/browse/SDK-9801
报错的代码在Sort.as的findItem方法中:
public function findItem(items:Array,
                             values:Object,
                             mode:String,
                             returnInsertionIndex:Boolean = false,
                             compareFunction:Function = null):int
    {
...
if (fieldsForCompare.length == 0)
                {
                	message = resourceManager.getString(
                		"collections", "findRestriction");
                    throw new SortError(message);
                }
...
}


修改FLEX源代码,还怕改出其他问题来,不是上上之选。目前已知的可采用的变通方法有两个:
仍然使用nested object,新建一个arrayCollection2,和作为datagrid的dataProvider的arrayCollection使用相同的source;对arrayCollection的增删改,全部通过操作arrayCollection2来完成,并refresh arrayCollection。目前采用的就是这种方法,可以规避“Find criteria must contain at least one sort field value”这个bug的出现。
采用变通的方式来展现nested object(此种方式未验证正确性,不过应该可行):
DataGrid error - Find criteria must contain at least one sort field value
http://www.flexonjava.net/2010/09/datagrid-error-find-criteria-must.html
引用
I got the above error message while doing some random tests on my current Flex application. This always seemed to be happening under the following scenario... a DataGrid was on the screen, the grid was binded to a collection (myVosArrayCollection). One of the gird columns data fields was pointing to a nested value (myVO.field.child) :
<mx:DataGridColumn dataProvider="{myVosArrayCollection}" dataField="field.child".../>
It seems like Flex has a problem dealing with nested objects for dataGrid column dataField. My solution is adding a wrapper getter on myVO.field.child , for me this is only natural as I'm using a two level VOs hierarchy exactly for these sort of scenarios, the BaseVO and the VO it self (but that's something I'll cover on a different post). MyVo now have a new getter:
public class MyVO
 {
     private var field:Object;
  
     public function get fieldChild():Object
     {
         return field.child;
     }
 }
my DataGrid now has the following setup:
<mx:DataGridColumn dataProvider="{myVosArrayCollection}" dataField="fieldChild".../>

分享到:
评论

相关推荐

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; boundary="----=_Part_0_1760344884.1407394057461" 第一步:需要先grantq权限: EXEC dbms_java.grant_...

    NEVE:Nested Virtualization Extensions for ARM

    为了解决这一性能瓶颈问题,研究者们提出了一种新的技术,即NEVE(Nested Virtualization Extensions for ARM)。NEVE通过一系列简化的架构改变,允许软件合并和延迟陷阱处理,即通过记录hypervisor指令的结果,直到...

    nested-table:&React&Redux和Redux-saga嵌套表练习

    克隆此仓库git clone https://github.com/mucahit/nested-table.git 运行yarn或npm install来安装依赖项。 运行yarn start或npm start来查看演示。 测验 运行yarn test或npm test进行测试。 生产 运行yarn build或...

    Spring Nested事务简单案例

    在本案例中,我们关注的是Spring中的Nested事务,这是一个相对复杂的特性,但非常有用,特别是在需要子事务处理的场景下。下面将详细解释这个概念。 Nested事务是基于JDBC的Savepoint机制实现的,它可以让我们在一...

    node-nested-object-mask:节点嵌套对象掩码

    注意: nested-object-mask可以与普通 JS 一起愉快地工作,但它是用 coffeescript 编写的,下面的例子也是如此(因为它是 2015 年)。 基本的 最简单的nested-object-mask是这样做的: # the hero of our story ...

    nested_record:将JSON字段映射到ActiveModel对象

    安装将此行添加到您的应用程序的Gemfile中: gem 'nested_record' 然后执行: $ bundle或将其自己安装为: $ gem install nested_record用法使用nested_record通过JSON属性在ActiveRecord模型上定义嵌套的关联。...

    Nested Object JSON Parser-crx插件

    "Nested Object JSON Parser-crx" 插件就是为了解决这个问题而设计的,尤其对于那些需要频繁处理嵌套JSON数据的开发者来说,这是一个非常实用的工具。 这个插件的主要功能是将嵌套的JSON字符串化对象转换成易于阅读...

    jss-nested:jss的嵌套选择器插件

    JSS插件,支持嵌套选择器 在规则中的选择器前放置& ,... '&:hover' : { background : 'blue' } , '&.clear' : { clear : 'both' } , '& .button' : { background : 'red' } , '&.selected, &.active' : { b

    java解决nested exception is java.lang.OutOfMemoryError Java heap space

    Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...

    json解析C++

    std::cout &lt;&lt; nestedObject.toStyledString() &lt;&lt; std::endl; ``` 总之,`jsoncpp`是C++开发中处理JSON数据的一个强大工具。通过它的API,你可以方便地解析JSON字符串,创建和操作JSON对象,以及将JSON对象序列化回...

    文章分类:Java编程,java面试题1

    - 静态嵌套类(Static Nested Class):不需要外部类实例就可以创建,不能访问外部类的非静态成员,但可以访问外部类的所有静态成员。 ### Java中的逻辑运算符 4. **&& 和 & 的区别:** - `&&` 是短路逻辑与...

    NestedFunctor:具有类型索引跟踪嵌套的函子的嵌套组合

    data Nested fs a where Flat :: f a -&gt; Nested ( Flat f ) a Nest :: Nested fs ( f a ) -&gt; Nested ( Nest fs f ) a 甲Nested fs a是中提到的所有层的组合物fs ,施加到a 。 具体来说, fs参数是一种 snoc-list ...

    nested-observe:Object.observe() 用于嵌套对象

    嵌套观察Object.observe()用于嵌套对象。兼容性nested-observe内部使用WeakMap (用于垃圾收集)。 Node.js的支持WeakMap和Object.observe从版本0.11.13 。 对于浏览器,请查看: 。 对于不受支持的浏览器 ,您可以...

    PyPI 官网下载 | nested_models-0.1.0-py2-none-any.whl

    资源来自pypi官网。 资源全名:nested_models-0.1.0-py2-none-any.whl

    nested-datatables:jQuery DataTables插件,用于在行中呈现嵌套的DataTables。 内部表独立于外部表的数据和布局

    $ npm install nested-datatables 用法 var table = new nestedTables . TableHierarchy ( 'example' , data , settings ) ; table . initializeTableHierarchy ( ) ; 方法 TableHierarchy(wrapperID,数据,设置...

    nested-object-finder:查找嵌套对象的值

    "nested-object-finder"是一个工具,它专门设计来解决这个问题,帮助开发者快速、有效地找到嵌套对象中的指定值。这个工具可能是以一个库或者函数的形式存在,简化了开发者的代码逻辑。 在JavaScript中,对象是键值...

    acts_as_nested_set的增强版BetterNestedSet

    《深入理解BetterNestedSet:acts_as_nested_set的增强版》 在Ruby on Rails开发中,数据结构的选择对于数据库操作的效率至关重要。其中,Nested Set模型是一种常用的数据组织方式,尤其适用于管理具有层级关系的...

    asm5.0.jar

    2013-08-12 14:33:37.672:WARN::Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:/E:/cloudwave-core/src/main/...

    Laravel开发-laravel-nestedset

    这就是Laravel Nestedset派上用场的地方。Nestedset是一种高效的存储和操作具有层级关系的数据模式,它允许我们进行快速的查询和便捷的操作,如插入、删除和移动节点。 Laravel Nestedset库,如`laravel-nestedset`...

Global site tag (gtag.js) - Google Analytics