2017-09-26 45 views
0

我是一个pjax初学者,不确定我是否实现它的方式是正确的。我有一个很多jQuery的旧项目。为了组织它,我遵循的方法是为每个页面的主体分配一个唯一的ID <body id="Login">。在我的布局,我写的代码:

var page = $('body').attr('id'); 
if(page !== '' && typeof self[page] != 'undefined') 
    self[page].init(); 

对于页面特定的jQuery,我写了这样的事情:现在

var Login = (function() { 
    var funct = {}; 

    //any variables, only required on this page 

    funct.someFunction = function(){ 
     //code 
    } 

    funct.init = function(){ 
     //all the functions that are to be called on page load 
    } 
    return funct; 

})(); 

,每个页面加载,需要在页面上唯一代码被执行。但是,我现在正在将大部分链接转到pjax链接。所以,登录页面上,有一个环节:

<a data-pjax href="/register">Register</a> 

和布局具有代码:

$(document).pjax('a[data-pjax]', '#pjax-container'); 

这将打开注册页面。但是,由于身份标识仍为“登录”,它没有加载Register.init()

我该如何克服这个问题?

回答

1

我从来没有使用pjax而是根据自己的文档,你可以添加事件侦听器页面改变后,运行一些代码完成

$(document).on('pjax:end', function(event) { 
    // 
}) 

你应该能够做一些与event.target,它应该有希望成为被点击的链接,以便找出新网页的内容。

+0

感谢您的回复。我最终做了类似的事情。我已经为所有的pjax链接添加了一个data-load属性,这些链接包含了traget页面的主体Id,然后相应地加载相关的JS。尽管如此,它解决了我的问题,并且现在可以在pjax和非pjax模式下工作,但我觉得这不是最优雅的解决方案。我可能会将我的问题提交给CodeReview以获得答案。谢谢你的帮助。 – gentrobot

+0

上午:当我说,“不是最优雅的”,我的意思是,我的方法和我的代码。与您建议的解决方案无关。 :) – gentrobot

相关问题