问题描述:在OMUI的一个可编辑的表格omGrid中,如果没有对组件设置dataSource,在执行insertRow操作时,表格中不会插入新记录,而通过自行扩展该组件为其配置dataSource之后(参见【Operamasks-UI】omGrid直接设置json数据给dataSource),执行deleteRow时会出现js报错的问题。
问题分析:
首先对于表格未设置dataSource时,直接执行insertRow操作,表格中未插入新记录的问题,是因为官方在开发该可编辑插件时,认为dataSource一定是会配置的,即使该返回一个空的数据集合也可以,如{rows:[],total:0}。通过om-grid和om-grid-roweditor的源代码的分析得知,roweditor插件是通过_onRefresh()函数对数据进行初始化的,代码的执行顺序图如下:
从图中可以看到,如果dataSource未设置或者加载数据失败的话,是不会调用_onRefreshCallbacks的,也就是说roweditor没有被初始化,所以在insertRow时不会成功。
再来研究一下这个执行顺序,会发现在_init()执行时,已经完成了对_onRefreshCallbacks的调用,而在init()执行之后,om-grid-roweditor插件才为om-grid注入了一个_onRefresh函数,从理论上来说,roweditor初始化是不会被完成的,但是为什么设置过dataSource的omGrid就没有问题了呢?了解了jquery的ajax调用机制之后,应该就会知道jquery加载数据是异步加载的,所以在omGrid加载数据时,roweditor已经初始化过了。而前面提到的自行扩展omGrid设置dataSource方式中,直接通过json数据作为数据源进行初始化时,代码执行是顺序执行的,同样会出现roweditor未被初始化的情况,导致在deleteRow时报js错误。如果尝试将om-grid中加载数据的ajax请求改为同步请求,也同样会出现deleteRow报js错误的情况。这算是om-grid-roweditor深藏的一个bug??
解决方案:
有了前面的分析,得出的解决方案是在组件初始化完成之后再为组件设置值,如下:
var data={"rows":[{}],"total":0}; $('#grid').omGrid({ title : '表格', limit:15, //dataSource:data, editMode:"all", colModel : [ {header : 'ID', name : 'id', width : 100, align : 'center'}, {header : '地区', name : 'city', width : 120, align : 'left',editor:{editable:true}}, {header : '地址', name : 'address', align : 'left', width : 'autoExpand' ,renderer:function(value,rowData,rowIndex){ return value + "<img src='tool_tip.gif'/>"; } } ] }); $("#grid").omGrid("setData",data);
相关推荐
只是我在网上找的 operamasks-ui api 文档 , 希望对你们有帮助
operamasks-ui-2.0 这个帮助文档很难才找到的,感谢CSDN,其中的说明真的是很详细了,维护旧代码用到的这个框架,相比easyui和bootstrap这个框架简单一些,不过用起来还是不错的,除了文档太少,不过有这个就基本...
"Operamasks UI 2.0 Demo"是一个与JavaScript相关的压缩包,包含了对Opera Masks用户...实际使用时,开发者需要按照readme.txt的指示进行操作,并通过operamasks-ui.war文件了解和体验Opera Masks UI 2.0的全部功能。
OperaMasks-UI-Guide帮助文档
operamasks-ui的demo程序,能够直接部署,运行。查看om-ui上优秀的标签。
"Operamasks-UI" 是一个专为Opera浏览器设计的用户界面增强插件的源代码包,其版本为1.2,存储在一个名为"operamasks-ui-1.2.zip"的压缩文件中。这个插件的目标是提供更加个性化、高效且易用的浏览体验。在了解这个...
1、将operamasks-ui.war部署到符合Servlet 2.5/JSP2.1的所有Web容器或J2EE应用服务器(如:Tomcat) 2、war包部署成功后访问:http://127.0.0.1:8080/operamasks-ui/
operamasks-ui 最新.完成的,下载下来直接可以点击查看,跟官网一模一样
总的来说,"operamasks-ui-2.0.zip" 提供了一个基于JavaScript的用户界面解决方案,包含丰富的组件和工具,适用于需要交互性界面的Web项目。其开源许可证使得开发者可以在遵守相应条款的情况下自由使用和定制,而...
总之,“operamasks-ui-2.1-demo”提供了一个实践OperaMasks UI框架的平台,对于想要提升浏览器扩展开发技能的开发者和设计师来说,这是一个宝贵的资源。通过阅读readme.txt和运行war文件,我们可以深入学习这个框架...
这个压缩包文件 "operamasks-ui-2.0-demo--.zip" 包含了用于演示和实践如何使用Opera Masks UI 2.0版本的资源和代码示例。 Opera Masks UI 是一个强大的工具,它允许开发者通过自定义界面元素和交互方式来增强...
【标题】"operamasks-ui-master.zip" 是一个包含了 OperaMasks UI 2.0 框架的源代码压缩包。这个框架是基于前端开发的,尤其适用于构建企业级的 Web 应用程序,其设计目标是提高开发效率,提供良好的用户体验。...
springMVC框架开发 博文链接:https://lyg8266.iteye.com/blog/1404821
通过深入学习这份"operamasks-ui-2.0-doc",开发者不仅可以掌握Operamasks的集成和自定义方法,还能了解到区块链技术在Web应用中的实际应用,这对于构建基于以太坊或其他区块链平台的DApp至关重要。同时,了解这些...
OM-UI简介 OM-UI是一个基于jQuery的前端组件库。它提供了丰富的组件,包括各种表单组件、布局组件、功能性组件等。它旨在帮助用户快速构建企业应用。它是简单易用的,并配有丰富的文档、示例和详实的开发手册。最...
《OperaMasks UI指南》是针对OperaMasks用户界面的一份详细参考资料,旨在帮助用户更好地理解和操作这款浏览器扩展。这份指南以`.chm`( Compiled Help Manual)格式封装,是一种常见的Windows帮助文档格式,通常...
6. **swf** 文件夹:SWF文件通常是Adobe Flash的内容,这可能意味着"Operamasks UI 2.1"在设计时考虑到了对Flash的支持,尽管现在Flash已经逐渐被淘汰,但在一些老旧的应用或特定场景中仍可能使用。 总结来说,...
这个"operamasks-faces_1.0"包可能让Opera浏览器的用户体验更加个性化和趣味性,尤其是在社交网络或在线沟通时,用户可以通过这些独特的面具表达自己的情绪和个性。同时,这也展示了开发者如何通过浏览器扩展来丰富...
这篇博客“扩展OperamasksUI的grid的排序和显示detail属性”显然聚焦于如何增强Operamasks UI框架的功能,特别是其grid组件。Operamasks UI可能是一个用于构建Web应用的开源库,提供了丰富的组件和功能,便于开发者...