jquery-mobile – JQM 1.4 – 在特定页面/选择器上使用pagecontainer事件的优先方法是什么?

前端之家收集整理的这篇文章主要介绍了jquery-mobile – JQM 1.4 – 在特定页面/选择器上使用pagecontainer事件的优先方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
jQuery Mobile v1.4,我们是2014年2月.

所以,我已经阅读了here (gihub),我们应该在catched pagecontainer事件上创建一个if语句,以假设加载的页面是否是预期的页面.

这是一个小场景,试图理解新的pageContainer小部件的预期行为,并且它是预期用途.

这很简单,一个登录页面,以编程方式预取欢迎页面,然后在成功登录时切换到欢迎页面.欢迎页面有一些JS脚本来设置页面动画,只有在页面可见时才必须启动.我们怎么做?

以下是我通过控制台调查pagecontainer事件时得到的结果.我的目标是找到一种方法来检测我的欢迎(实际上任何页面)页面是否处于活动/可见状态.

为了理解,我使用这种格式作为查询

$( 'body' ).on( 'pagecontainerbeforeload',function( event,ui ) {
    console.log("beforeload");
    console.log(event);
    console.log(ui);
});

如此新鲜的开始,当我加载页面& JQM第一次(即/ Users / login)

可用事件:

> pagecontainercreate =>空的ui
> PCbeforetransition => ui.toPage可用
> PCshow =>只获取一个ui.prevPage(在这种情况下为空)
> PCtransition => ui.toPage可用

现在,即使您禁用了过渡效果,它们也会一直启动(See api)

好的,然后我想以编程方式加载页面(预取它),我这样做:(我希望/ Users / welcome)

$("body").pagecontainer("load","/Users/welcome");

我启动了这些事件(该页面尚未显示):

> PCbeforeload =>我得到一个我可以用来识别页面的网址..
> PCload =>与PCbeforeload几乎相同的数据

好的,现在我去改变我的页面:(到/ Users / welcome)

$("body").pagecontainer("change","/Users/welcome");

我触发了这些事件:

> PChide => ui.nextPage与ui.toPage相同…
> PCbeforetransition => ui.toPage可用
> PCshow =>只给出了ui.prevPage
> PCtransition => ui.toPage按预期出现

好的,现在我很确定我想要使用的唯一pagecontainer事件,以确保加载此页面是pagecontainertransition.以下是我在每个需要启动JS的页面上实现的内容

设置页面容器的ID(PHP)

<div data-role="page" data-theme='a' id="<?PHP echo $this->id_url()?>">

…在页面的末尾(JS)

$( 'body' ).on( 'pagecontainertransition',ui ) {
    if(ui.toPage[0] == $('#'+id_url )[0] ) {
        functionToLaunchWhenPageShowUp();
    }
} );

现在,正如你所看到的,我指的是ui.toPage 1st child [0]将它与$(‘.selector’)第一个孩子[0]进行比较.这是正确的方法吗?我的意思是,新API的预期方式.感谢分享您的知识;)

解决方法

我设法做了一些有效的事情,相对简单,并且尽可能接近DRY原则(不要重复自己).

按顺序将它们“加载”:

JS脚本在<头>文件

<script type="text/javascript" src="/js/jquery-2.1.0.min.js"></script>
<script type="text/javascript">
  (function(){
  //Global settings for JQM 1.4.0
  $( document ).on( "mobileinit",function() {
        //apply overrides here
         $.mobile.defaultPageTransition = 'flip'; 
  });
  // The event listener in question !
  $( document ).ready(function () { //..only launched once the body exist
    // The event listener in question :
    $( 'body' ).on( 'pagecontainertransition',ui ) {
        //gets the id you programatically give to your page
        id_url = $( "body" ).pagecontainer( "getActivePage" )[0].id;
        //compare the actual event data (ui.toPage) 
        if( ui.toPage[0] == $('#'+id_url )[0] ) {
            // failsafe
            if ( typeof( window[ id_url ].initPage ) === "function" ) {   
                // call the dynamically created init function
                window[ id_url ].initPage();
            }
        }
    } );
  });

  document.loadPage = function( url ){
    $( "body" ).pagecontainer( "load",url,options);
  };
  document.changePage = function( url ){
    $( "body" ).pagecontainer( "change",options);
  };
 })();    
</script>
<script type="text/javascript" src="/js/jquery.mobile-1.4.0.min.js"></script>

每个返回页面的开始

<div data-role="page" data-theme='a' id="<?PHP echo $this->id_url()?>">
<div data-role="content">
<script type="text/javascript">
// we create dynamically a function named after the id you gave to that page
// this will bind it to window
this[ '<?PHP echo $this->id_url() ?>' ].initPage = function(){
    // put anything you want here,I prefer to use a call 
    // to another JS function elsewhere in the code. This way I don't touch the 
    // settings anymore
    NameOfThisPage.launchEverythingThatNeedsTo();
};
</script>
...

这是此代码的描述.首先,我为所有这些全局查询获得了一个位置,JQM已经强迫我把东西放在jquery.js&之间. jquery.mobile.js,让我们用它.

与全局JQM设置一起,我只使用一个事件监听器绑定到正文/文档/(无论将来是什么).它只在身体存在时才会发动.

现在,这里是有趣的开始.我以编程方式为服务器返回的每个页面提供一个id(即使用_而不是/的脚本路由).然后创建一个以该id命名的函数,它附加到窗口,(我想你可以将它放在别处……).

然后回到事件监听器,在转换时,你得到你通过pagecontainer(“getActivePage”)方法设置的id,使用该id来获取页面jQuery样式,然后将它与事件监听器返回的数据进行比较.

如果成功,请使用该ID启动您在页面中放置的init函数.如果您没有在页面中放置init脚本,则会出现故障保护.

这里的奖励是那些document.loadPage / changePage.我把它们放在那里,以防改变页面方法发生变化.一个地方需要修改,它将适用于整个应用程序.那是DRY ^^

总而言之,如果您对改进此方法方法发表评论,请分享. v1.4方法的例子非常缺乏(与v1.3示例有点混淆).我试图尽我所能分享我的发现(ps.我需要那些代表点:P)

猜你在找的jQuery相关文章