踩坑:Qwrap中CustEvent的返回值问题

  近期在开发一个urlcube组件的时候需要创建一些自定义事件,使用到了qwrap中的CustEvent.createEvents,但是由于对这个自定义事件创建的原理理解不是很透彻,导致最后使用的时候产生了很多问题。

  现把问题的产生原因及解决方法整理如下:

  问题的产生

  1.首先是创建自定义事件和事件处理函数。

 1 //安装自定义事件
 2 QW.CustEvent.createEvents(UrlCube , ‘setDataMode’);
 3 //自定义事件:向服务器端发送数据前
 4 UrlCube.on("setDataMode" , function (e){
 5     if (UrlCube.curReqMode === 'none') {
 6         UrlCube.curReqMode = e.mode;
 7         return true;
 8     }else{
 9         UrlCube.ui.checkRequestModeFailed();
10 return false; 11 } 12 });

  2.调用执行相应的方法。

if (UrlCube.fire("setDataMode",{mode:"get"}) === false) {
    return false;
}

  这个时候奇怪的现象出现了:无论UrlCube.curReqMode的值是否是‘none’,函数UrlCube.fire("setDataMode",{mode:"get"})执行后的返回值总是ture,即使是在UrlCube.ui.checkRequestModeFailed()正确执行后应该返回false的情况。

  这个现象让人很是困惑,而且跟踪后确定编码的逻辑上没有问题。

  问题的分析

  月影说:Qwrap中custEvent的非独占模式本来就不支持return false

  所以很明显如果想通过调用自定义的事件来返回false,直接调用函数是不行的。

  问题的解决

  其实很简单,只要在返回false前指定下returnValue的值就可以了。

 1 //自定义事件:向服务器端发送数据前
 2 UrlCube.on("setDataMode" , function (e){
 3     if (UrlCube.curReqMode === 'none') {
 4        UrlCube.curReqMode = e.mode;
 5        return true;
 6     }else{
 7         UrlCube.ui.checkRequestModeFailed();
 8         e.returnValue = false;
 9         return false;
10      }
11 });

  再次运行代码,可以发现程序已经可以正常返回false了。

注意:以上问题都是在Qwrap自定义函数返回false的情况下才会出现的,如果返回其他值则不受任何影响。

posted on 2012-09-13 13:07  GRisGR  阅读(282)  评论(0)    收藏  举报

导航