Pjax.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. let $d = $(document);
  2. export default class Pjax {
  3. constructor(Dcat) {
  4. this.boot(Dcat)
  5. }
  6. boot(Dcat) {
  7. let container = Dcat.config.pjax_container_selector;
  8. let _this = this;
  9. $.pjax.defaults.timeout = 5000;
  10. $.pjax.defaults.maxCacheLength = 0;
  11. $('a:not(a[target="_blank"])').click(function (event) {
  12. $.pjax.click(event, container, { fragment: 'body' });
  13. });
  14. $d.on('pjax:timeout', function (event) {
  15. event.preventDefault();
  16. });
  17. $d.off('submit', 'form[pjax-container]').on('submit', 'form[pjax-container]', function (event) {
  18. $.pjax.submit(event, container)
  19. });
  20. $d.on("pjax:popstate", function () {
  21. $d.one("pjax:end", function (event) {
  22. $(event.target).find("script[data-exec-on-popstate]").each(function () {
  23. $.globalEval(this.text || this.textContent || this.innerHTML || '');
  24. });
  25. });
  26. });
  27. $d.on('pjax:send', function (xhr) {
  28. if (xhr.relatedTarget && xhr.relatedTarget.tagName && xhr.relatedTarget.tagName.toLowerCase() === 'form') {
  29. var $submit_btn = $('form[pjax-container] :submit');
  30. if ($submit_btn) {
  31. $submit_btn.button('loading')
  32. }
  33. }
  34. Dcat.NP.start();
  35. });
  36. $d.on('pjax:complete', function (xhr) {
  37. if (xhr.relatedTarget && xhr.relatedTarget.tagName && xhr.relatedTarget.tagName.toLowerCase() === 'form') {
  38. var $submit_btn = $('form[pjax-container] :submit');
  39. if ($submit_btn) {
  40. $submit_btn.button('reset')
  41. }
  42. }
  43. Dcat.NP.done();
  44. });
  45. // 新页面加载,重新初始化
  46. $d.on('pjax:loaded', function () {
  47. _this.boot(Dcat)
  48. });
  49. }
  50. }