天涯之外

导航

json.js与ExtJS一起使用的问题

json.js和ExtJS都是有名的开源的东东,但是这两个有名的东东在一起使用时会出现一些问题,我就遇到一例,害我折腾了大半天,郁闷!现把问题和解决方法记下来以为后来者提个醒。

 

问题的出现

      当如下使用ExtJS

 

         win = new Ext.Window({
                title: '123',
                width: 600,
                height: 400,
                closeAction: 'close',      // 注意这里是close,也就是说当关闭窗口时,窗口会被销毁destroy
                plain: true,
                resizable : false,
                layout: 'border',
                items: [ grid ],               // grid是一个Ext.grid.GridPanel
                buttons: [{
                    text: '关闭',
                    handler: function(){
                        win.close();
                        win = null;
                    }
                }]
            });

并且页面引用了json.js。当执行win.close()或点击左上角的x按钮时会出现错误

---------------------------
错误
---------------------------
出现了运行时间错误。
是否要进行调试?

行: 142
错误: 'config.isTarget' 为空或不是对象
---------------------------
是(Y)   否(N)  
---------------------------

解决办法

打开json.js文件,到文件末尾,找到

if (!Object.prototype.toJSONString) {
    Object.prototype.toJSONString = function (filter) {
        return JSON.stringify(this, filter);
    };
    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };
}

代码,注释掉,这样就不出问题了。

 

分析

      出现问题的原因在于ExtJS操作了json为对象增加的两个函数toJSONString和parseJSON,json.js的做法是好的,ExtJS的做法也是不错的,但是把他们放在一起就会打架,之所谓鱼与熊掌不可兼得啊,只好委屈一下json.js了,另外追究ExtJS的问题也是难度的,所以就遵循吃柿子的规则了。

      在注掉那几行代码(见解决办法)后,我们再处理JSON时可能会多写一些代码,来个补救措施吧,呵呵

在json.js最后加上一下代码

function toJSON(obj, filter) {
    if (typeof obj != 'string')
        return JSON.stringify(obj, filter);
    else
        return JSON.parse(obj, filter);
}

 

以后不管是JSON对象到字符串,还是字符串到JSON对象,都可以使用toJSON函数搞

posted on 2009-05-24 17:29  天涯之外  阅读(400)  评论(1编辑  收藏  举报