解决AF3 诡异的页面显示问题

  使用AF3开发应用,发现有一个bug,在同一个view下面的不同页面切换后,这时候切换到别的view中的页面,然后再切换到上一个view下的页面,此时只要目标不是刚才前一个view中的最后显示页面就会出问题,因为此时只显示最后的页面!

调试后发现是由于最后的活动页面的active类没有被移除,我希望找到合适的事件来自己执行这个任务。因此跟踪了view和panel的事件。下面是我记录的AF3下 panel组件的切换过程触发的事件记录。

//### 过程1:viewHome.pageHome --> viewLogin.page_login
******************   page_login panelbeforeload
******************   viewLogin panelbeforeload
******************   page_login panelbeforeunload
******************   viewLogin panelbeforeunload
******************   viewHome panelunload
******************   viewLogin panelload
******************   page_login panelload
******************   viewLogin panelload

//### 过程2(:back):viewLogin.page_login --> viewHome.pageHome
******************   pageHome panelbeforeload
******************   viewHome panelbeforeload
******************   pageHome panelbeforeunload
******************   viewHome panelbeforeunload
******************   viewHome panelload
******************   viewLogin panelunload

//### 过程3:viewHome.pageHome --> viewLogin.page_login
******************   page_login panelbeforeload
******************   viewLogin panelbeforeload
******************   page_login panelbeforeunload
******************   viewLogin panelbeforeunload
******************   viewHome panelunload
******************   viewLogin panelload
******************   page_login panelload
******************   viewLogin panelload

//### 过程4:viewLogin.page_login --> viewLogin.page_register
******************   page_register panelbeforeload
******************   viewLogin panelbeforeload
******************   page_login panelbeforeunload
******************   viewLogin panelbeforeunload
******************   page_login panelunload
******************   viewLogin panelunload
******************   page_register panelload
******************   viewLogin panelload

//### 过程5:viewLogin.page_register --> viewLogin.page_login
******************   page_login panelbeforeload
******************   viewLogin panelbeforeload
******************   page_register panelbeforeunload
******************   viewLogin panelbeforeunload
******************   page_register panelunload
******************   viewLogin panelunload
******************   page_login panelload
******************   viewLogin panelload


发现如下问题:

1,不同view下panel切换:

  transition不带:back的时候,原panel和view有unload事件;

  如果带有:back,则原panel没有unload事件,原view有unload事件

2,同一view下panel切换:

  transition不带:back的时候,原panel有unload事件,view竟然也有unload事件!!;

  如果带有:back,则原panel没有unload事件,view有unload事件!!

想起应该是冒泡事件捣乱,遂在panel的事件中停止冒泡,再次重复上面过程:

//### 过程1:viewHome.pageHome --> viewLogin.page_login
******************   page_login panelbeforeload
******************   page_login panelbeforeunload
******************   viewHome panelunload
******************   viewLogin panelload
******************   page_login panelload

//### 过程2(:back):viewLogin.page_login --> viewHome.pageHome
******************   pageHome panelbeforeload
******************   pageHome panelbeforeunload
******************   viewLogin panelunload
******************   viewHome panelload
******************   pageHome panelload

//### 过程3:viewHome.pageHome --> viewLogin.page_login
******************   page_login panelbeforeload
******************   page_login panelbeforeunload
******************   viewHome panelunload
******************   viewLogin panelload
******************   page_login panelload

//### 过程4:viewLogin.page_login --> viewLogin.page_register
******************   page_register panelbeforeload
******************   page_login panelbeforeunload
******************   page_login panelunload
******************   page_register panelload

//### 过程5:viewLogin.page_register --> viewLogin.page_login
******************   page_login panelbeforeload
******************   page_register panelbeforeunload
******************   page_login panelload
******************   page_register panelunload

这下子逻辑清晰了:

一、不同view之间的页面切换:

原view有unload事件,新view有load事件;新panel有beforeload、beforeunload,load事件。

二、同一个view之中的页面切换:

原panel有beforeunload、unload事件,新panel有beforeload、load事件;view没有事件!

 

$('.view,.panel').on('panelbeforeload panelbeforeunload panelload panelunload',function(E){
        var el=$(this);
        if(el.hasClass('panel')){E.preventDefault();E.stopPropagation();}
        if(el.hasClass('panel') && E.type=='panelunload'){el.removeClass('active');}
        if(el.hasClass('view') && E.type=='panelunload'){el.find('.panel').removeClass('active');}
    });

 

posted @ 2015-03-27 16:44  柒零壹  阅读(367)  评论(0编辑  收藏  举报