当前位置:首页 > 开发 > 编程语言 > Json > 正文

【Operamasks-UI】omGrid直接设置json数据给dataSource

发表于: 2013-06-29   作者:dinguangx   来源:转载   浏览次数:
摘要:      在operamasks-ui中,omGrid的dataSource属性可以接收的值为一个url地址串,而不能直接把一个json对象传递给grid,这对于想直接在前台封装JSON对象,并在omGrid上面展示就没办法实现了。    为了解决该问题,可以通过自行扩展新函数(解决方案一),或者改造原来的数据加载程序(解决方案二);不管采用什么

     在operamasks-ui中,omGriddataSource属性可以接收的值为一个url地址串,而不能直接把一个json对象传递给grid,这对于想直接在前台封装JSON对象,并在omGrid上面展示就没办法实现了。

   为了解决该问题,可以通过自行扩展新函数(解决方案一),或者改造原来的数据加载程序(解决方案二);不管采用什么样的解决方案,基于operamasks-ui良好的扩展机制和监听机制,都是很容易实现的。

 

   解决方案一:为omGrid新增函数setSimpleData(data),实现直接加载json数据的功能.

 

/*
 * Depends:
 *  om-grid.js
 */

(function($) {
	/**
	 * 直接加载json格式的数据
	 */
    $.omWidget.addInitListener('om.omGrid',function(){
        var self = this,
            el = this.element,
			op = this.options;
		if (this.loading) {
                return true;
        }
        var grid = el.closest('.om-grid'),
			loadMask = $('.gBlock',grid);
        self.setSimpleData=function(data){
			var pageData = this.pageData;
			var nowPage = pageData.nowPage || 1,
			data=data || {"rows":[],"total":0};
			this.loading = true;
			loadMask.show();
			try {
				self._addData(data);
				for(var i=0 , len=op._onRefreshCallbacks.length; i<len; i++){
                    	op._onRefreshCallbacks[i].call(self);
                }
				self._trigger("onRefresh",null,nowPage,data.rows||[]);
			}finally{
			   loadMask.hide();
			   this.loading = false;
			}
		}
    });
})(jQuery);

 

 

    解决方案二:改造原有的加载数据函数,使得omGrid的dataSource对象可以是一个json对象,也可以是一个url.

    参考链接:http://www.operamasks.org/forum/thread-8912-1-9.html

(该参考链接里的解决方案是直接修改源代码的方式来实现的,其实可以使用扩展机制来实现)

    通过插件扩展来实现该功能的代码如下:

$.omWidget.addBeforeInitListener('om.omGrid',function(){
        this._base_populate=this._populate;
		this._populate=function(){
	    var self=this,op = this.options,el=this.element;
		 if(op.dataSource && typeof op.dataSource == 'object'){
		 	var data = op.dataSource;
		 	var grid = el.closest('.om-grid'),
			loadMask = $('.gBlock',grid);
			var pageData = this.pageData;
			var nowPage = pageData.nowPage || 1,
			data=data || {"rows":[],"total":0};

			this.loading = true;
			loadMask.show();
			try {
				self._addData(data);
				for(var i=0 , len=op._onRefreshCallbacks.length; i<len; i++){
                    	op._onRefreshCallbacks[i].call(self);
                }
				self._trigger("onRefresh",null,nowPage,data.rows||[]);
			}finally{
			   loadMask.hide();
			   this.loading = false;
			}
             return true;
         } else {
		    this._base_populate();
		 }
	   }
    });

 该解决方案在对可编辑表格执行数据删除时,遇到js报错,原因及处理办法见

 

更多内容请进群:312531189

【Operamasks-UI】omGrid直接设置json数据给dataSource

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1.背景 1)本文只是简单记录下怎么使用operamasks-ui的omGrid进行增删改查,大部分代码可在operamask
1.背景 1)本文只是简单记录下怎么使用operamasks-ui的omGrid进行增删改查,大部分代码可在operamask
问题描述:在operamasks-ui的omGrid的分页条中没有pageSize的下拉选择框,而这个功能也是一个很实用
问题描述:在operamasks-ui的omGrid的分页条中没有pageSize的下拉选择框,而这个功能也是一个很实用
在$.ajax代码的时候,两端差不多的代码,一段可以提交,另一段在后台怎么样也无法request到ajax pos
一、问题再现: 我需要浏览器输出的是json数据,但是浏览器弹出的是一个文件保存的对话框,这样的体
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="personTab.aspx.cs" Inherits="CPM
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="CPMS.vie
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号