如何调用在$(document).ready()上调用的jquery,在调用pjax时调用?
问题描述:
我是一个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()。
我该如何克服这个问题?
答
我从来没有使用pjax而是根据自己的文档,你可以添加事件侦听器页面改变后,运行一些代码完成
$(document).on('pjax:end', function(event) {
//
})
你应该能够做一些与event.target
,它应该有希望成为被点击的链接,以便找出新网页的内容。
感谢您的回复。我最终做了类似的事情。我已经为所有的pjax链接添加了一个data-load属性,这些链接包含了traget页面的主体Id,然后相应地加载相关的JS。尽管如此,它解决了我的问题,并且现在可以在pjax和非pjax模式下工作,但我觉得这不是最优雅的解决方案。我可能会将我的问题提交给CodeReview以获得答案。谢谢你的帮助。 – gentrobot
上午:当我说,“不是最优雅的”,我的意思是,我的方法和我的代码。与您建议的解决方案无关。 :) – gentrobot