当使用pjax时,页面在哪里初始化javascript?
大多数情况下,我会在当使用pjax时,页面在哪里初始化javascript?,javascript,pjax,Javascript,Pjax,大多数情况下,我会在$(文档)中放入一些javascript代码。准备好在页面上执行一些初始化操作,如事件绑定等 但是现在我想对我的一些页面使用pjax 使用pjax,因为只有部分页面被刷新,$(document.ready将不会再次被调用 我可以在eventpjax:end上手动触发初始化脚本,但我也想知道是否有更好的解决方案 谢谢。我认为您最好的选择可能就是按照您所说的去做,并将特定于页面的init代码连接到“pjax:end”事件。这样一来,它将基本上完成与以前相同的工作,并针对加载到DO
$(文档)中放入一些javascript代码。准备好在页面上执行一些初始化操作,如事件绑定等
但是现在我想对我的一些页面使用pjax
使用pjax,因为只有部分页面被刷新,$(document.ready
将不会再次被调用
我可以在eventpjax:end
上手动触发初始化脚本,但我也想知道是否有更好的解决方案
谢谢。我认为您最好的选择可能就是按照您所说的去做,并将特定于页面的init代码连接到“pjax:end”事件。这样一来,它将基本上完成与以前相同的工作,并针对加载到DOM中的任何html运行。您可以轻松地将所有现有代码链接到document.ready和pjax:success事件,如下所示:
之前:
$(document).ready(function() {
// page load stuff
});
之后:
$(document).on('ready pjax:success', function() {
// will fire on initial page load, and subsequent PJAX page loads
});
我想出了这个巧妙的解决办法。首先在全局范围内为绑定创建名称空间:
// Binder for PJAX init functions
$.fn.bindPJAX = {}; // Create namespace
function bindPJAX(functionName) {
// Check function existence, then call it
return $().bindPJAX[functionName] && $().bindPJAX[functionName]();
}
然后将回调绑定到PJAX单击:
$(document).ready(function(){
if ($.support.pjax) {
$('a[data-pjax]').on('click', function(event) {
var container = '#main';
var emptyRoute = 'feed'; // The function that will be called on domain's root
// Store current href without domain
var link = event.currentTarget.href.replace(/^.*\/\/[^\/]+\//, '');
var target = link === "" ? emptyRoute : link;
// Bind href-specific asynchronous initialization
$(document).on('ready pjax:success', container, function() {
bindPJAX(target); // Call initializers
$(document).off('ready pjax:success', container); // Unbind initialization
});
// PJAX-load the new content
$.pjax.click(event, {container: $(container)});
})
}
});
设置好后,可以继续扩展$.fn.bindPJAX
对象,以添加与路由名称匹配的函数。例如,当访问http://www.yourdomain.com/admin
通过PJAX:
$.extend($.fn.bindPJAX, {
admin: function(){
// Initialization script for /admin route
}
});
当PJAX失败或不支持时,你也应该考虑一个可行的干后退,比如通过检查“代码”>窗口,在JavaScript中的位置< /代码>,或者在你的应用程序的视图中硬编码,启动第一个页面上的正确的init函数。< /p>如果每个页面的初始化代码不同,我能做什么?太棒了!!非常感谢。@Adrian Macneil-如果每个页面的初始化代码不同,我该怎么办?@Vonfry我使用位置页面window.location.pathname