踩坑: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的情况下才会出现的,如果返回其他值则不受任何影响。
浙公网安备 33010602011771号