EXTJS 简单总结

在这里我主要说明两个方法,一个是eval ;另一个是decode;

eval:先看一个简单的例子:

<html>
<body>

<script type="text/javascript">

eval("x=10;y=20;document.write(x*y)")
document.write("<br />")

document.write(eval("2+2"))
document.write("<br />")

var x=10
document.write(eval(x+17))
document.write("<br />")

eval("alert('Hello world')")

</script>

</body>
</html>

运行结果:

200
4
27

弹出helloword对话框

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

 然而估计见的最多的地方便是在ajax在处理返回值(通常是json格式)时用的;那么他究竟起啦什么作用?

   以前只是知道eval 是将后台传的json串;转化为js对象;

问题1:一定要用eval吗?

     答:当然不是;例如:extjs中的rest风格就指明啦请求与接收的数据类型(一般都指明为json);就不需要eval啦;再来说说那是如何解析json串的吧!

 

var dataObj=eval("("+data+")");//转换为json对象

Red rose为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

而到此为止这也仅仅是转换为一个javascript对象,eg:对于{name:'chang',data:12345}(赋值给obj)来说;可通过eval将其转换为javascript对象;但是却不能通过 obj.name 或obj.data来进行取值;这时便用到啦Ext.JSON.decode(string);这个方法;


总结:网上有些人说eval与decode没有区别;但是今天我却真正的遇到啦这两个方法的区别;例如一个绘制柱状图的例子:

spring代码:

@RequestMapping(value = "/getColumnData.json", method = RequestMethod.GET)
    public List<Object> getColumnData(){
        System.err.println("...");
        List<Object> list=new ArrayList<Object>();
        list.add("{name:'北京',data:1330}");
        list.add("{name:'上海',data:6330}");
        list.add("{name:'广州',data:3330}");
        list.add("{name:'武汉',data:1890}");
        list.add("{name:'天津',data:1690}");
        list.add("{name:'济南',data:1450}");
        list.add("{name:'南京',data:1330}");
        list.add("{name:'厦门',data:3343}");
        return list;
    }

extjs代码:

var columnStore1 = Ext.create('Ext.data.JsonStore', {
    fields : [ 'name', 'data' ],
    
 data : getColumnData()
/*    
 *这些是原始数据所做的一切就是将这些data
 *从后台给传递进来
 * data : [ {
        name : '北京',
        data : 1330
    }, {
        name : "上海",
        data : 6330
    }, {
        name : "广州",
        data : 3330
    }, {
        name : "武汉",
        data : 1890
    }, {
        name : "天津",
        data : 1690
    }, {
        name : "济南",
        data : 1450
    }, {
        name : "南京",
        data : 1330
    }, {
        name : "厦门",
        data : 3343
    } ]
    数据解析时看做对象来处理的
    *
    这是用firebug调试时;看到store里面的所有data都是object;就是说明是可以通过.运算符来获取属性值的;
     如果仅仅是用eval来解析的话;raw是一个字符串;
    raw: Object
     data: 1890
     name: "武汉"
    *
    */

});
function getColumnData() {

    var resultData;
    Ext.Ajax.request({
        url : "http://localhost:8080/zutnlp-display/column/getColumnData.json",
        async : false,// ASYNC 是否异步( TRUE 异步 , FALSE 同步)
        success : function(response) {
            var result = eval("(" + response.responseText + ")");
            
            var text = result['objectList'];
            console.log(text.name+"..."+text.data);//控制台报未定义
            resultData = text;
        }

    });
    var resultArray = new Array();
    Ext.Array.each(resultData, function(value) {
        var obj = Ext.JSON.decode(value);
        console.log(obj.name+"..."+obj.data);
        
    //    console.log('name: '+value['name'] +'....data: '+value['data']);这样是可以取到的
         resultArray.push(obj);

    });

     return resultArray;
    //return resultData;

}
Ext.onReady(function() {

    var b2 = Ext.create('Ext.Window', {
        width : 600,
        height : 400,
        hidden : false,
        closeAction : 'hide',
        maximizable : true,
        title : '柱形图展示图表',
        layout : 'fit',
        items : {
            id : 'chartCmp',
            xtype : 'chart',
            style : 'background:#fff',
            animate : true,
            shadow : true,
            store : columnStore1,
            axes : [ {// 轴
                type : 'Numeric',
                position : 'left',
                fields : [ 'data' ],
                title : '人数',
                grid : true,
                minimum : 0
            }, {
                type : 'Category',
                position : 'bottom',
                fields : [ 'name' ],
                title : '城市'
            } ],// 序列
            series : [ {
                type : 'column',
                axis : 'left',
                highlight : true,
                tips : {// 提示
                    trackMouse : true,
                    width : 140,
                    height : 28,
                    renderer : function(storeItem, item) {
                        this.setTitle(storeItem.get('name') + ': '
                                + storeItem.get('data') + ' 名');
                    }
                },
                // 格式化
                renderer : function(sprite, record, attr, index, store) {
                    var fieldValue = Math.random() * 20 + 10;
                    var value = (record.get('data') >> 0) % 3;
                    var color = [ 'rgb(213, 70, 121)', 'rgb(44, 153, 201)',
                            'rgb(146, 6, 157)', 'rgb(49, 149, 0)',
                            'rgb(249, 153, 0)' ][value];
                    return Ext.apply(attr, {
                        fill : color
                    });
                },
                label : { // 控制柱形图label
                    display : 'insideEnd',
                    'text-anchor' : 'middle',
                    field : 'data',
                    renderer : Ext.util.Format.numberRenderer('0'),
                    orientation : 'vertical',
                    color : '#333'
                },
                xField : 'name',
                yField : 'data'
            } ]
        }

    });
    b2.show();

});


     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值