ExtJS和SilverLight的集成BUG

这又是个很奇怪的BUG

起因呢,是准备在框架里集成一个文件上传控件,考虑到要支持大文件(上G的文件)上传

一开始使用的是Ext.ux.UploadDialog这个专门为ExtJS写的文件上传控件,问题是这个控件在FF下文件上传完毕后始终显示错误(难得BUG不是出现在IE下),查了下原因,应该是IE和FF的Ajax机制不同造成的,看了好半天,不知道怎么改,还是放弃算了

然后呢,找了N多的SilverLight2-4的文件上传控件,最后找了个比较合适的,改了改,加了些JS控制代码以及回调函数进去,OK,可以了

下一步,集成到ExtJS的Window里

一开始使用SilverLight的一个SivlerLight Component模式集成,老出问题,后来干脆还是直接写HTML代码嵌入吧

代码时这样的:

    items: [
        new Ext.Panel({
            frame: true,
            html: '<object id="silverlightfileupload" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"><param name="source" value="/ClientBin/FileUpload.xap"/><param name="background" value="white" /><param name="windowless" value="false" /><param name="minRuntimeVersion" value="2.0.31005.0" /> <param name="autoUpgrade" value="true" /><param name="initParams" value="UploadPage=http://localhost/ExtFileWeb/FileUpload.ashx,Filter=Images (*.jpg)|*.*" /><a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"><img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/></a></object>'
        })
    ],

 

测试后,IE和FF下都没问题了,文件上传似乎不够快,不过还是比较稳定的(原本想法本地上传本机,速度应该呼啦啦的一秒不说几百兆,几十兆总该有的,但是实际运行保持在几兆每秒的速度,跟HTTP上传可能有关系吧)

 

继续测试,问题出现了,这次又是在该死的IE下......在IE下一拖动上传文件的窗口,控件里已选择的文件就神奇的消失了......

这个真的不知道怎么回事了,测试了N多遍,FF下就没问题,后台也没接收到任何事件,反正文件就没了,然后文件数量那个显示字段正确的变成了0

难道是ExtJS每拖动一下,就重新刷新了该控件?

被迫先尝试下把上传控件窗口设置成了不可拖动,虽然不出现消失的问题了,可总还是不对劲

在网上搜索了N天,没有结果

后来到是搜索到一个类似的,是日期控件拖动后会消失,嗯有点象,里面解释是阴影导致的内存泄露,这个有点夸张了么

不过解决方法到是正确的

代码在下面,覆盖Drag方法,取消阴影

Ext.override(Ext.Window.DD, {
    startDrag: function() {
        var w = this.win;
        this.proxy = w.getEl();
        if (w.constrain !== false) {
            var so = w.el.shadowOffset;
            this.constrainTo(w.container, { right: so, left: so, bottom: so });
        } else if (w.constrainHeader !== false) {
            var s = this.proxy.getSize();
            this.constrainTo(w.container, { right: -(s.width - this.headerOffsets[0]), bottom: -(s.height - this.headerOffsets[1]) });
        }
    },
    endDrag: function(e) {
        this.win.saveState();
    }
});

 

 

这个代码加进去后,拖动时控件里的文件不再消失了,不过拖动的时候有些难看,没办法

posted @ 2012-05-07 13:07  Zux  阅读(559)  评论(0编辑  收藏  举报