Trying to avoid multiple calls to jQuery in a Domino XPage

六眼飞鱼酱① 提交于 2019-12-12 04:27:33

问题


I am attempting to use the 'DataTables' table plug-in for jQuery on a simple Domino XPage.

I have loaded the two required libraries from CDN's...

JQuery: ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js

DataTables: cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css

I have also tried loading them from local resources (doesn't help).

I then prepare a basic table on my XPage, and include the necessary Javascript to initialise the table...

$(document).ready(function() {
    $('#tableID').DataTable();
} );

When I test the XPage, I continually observe

test.xsp:15 Uncaught TypeError: $(...).DataTable is not a function

I've searched through several forums, and the general consensus is that...

a) I have loaded the libraries in the wrong order (nope!)

b) I have loaded jQuery more than once (how?)

I have many other solutions using Bootstrap and jQuery, and have never run into this issue before. So, I though I might strip the XPage back to bare bones. I got rid of all Dojo elements on the page by adding the following line to the 'xp.properties' file...

xsp.client.script.libraries=none

That actually seemed to work! I no longer observed the error. However, my page no longer looked like it should (for obvious reasons!). I've had to restore the 'xp.properties' file back to its original state, but cannot find out how to avoid the error.

Has anyone successfully used the 'DataTables' jQuery plug-in on an XPage? Any feedback or suggestions would be most appreciated!


回答1:


Yes I have been doing a load of work on DataTables in XPages so it definitely works! I know your pain though.... The order of your jquery scripts in relation to each other may be okay, however there is a clash with dojo and it's AMD loader, so you have 3 options.

Option 1. Load your jquery scripts before any of the xpages scripts

Option 2. remove the 'amd loader' just before your jquery scripts and then restore it just after

Option 3. modify the javascript of the datatables so it ignores the amd problem

Option 1 : Loading your jQuery scripts first

If you are using resource aggregation, you can use this tip from Sven Hasselbach's blog, in which you use the generic 'headTag' resource tag and it will load first. http://hasselba.ch/blog/?p=1181

If you want a solution that will work regardless of resource aggregation setting, I have an example on my blog in which you can create a viewRootRenderer which will then allow you to specify that you want a script loaded BEFORE everything else http://camerongregor.com/2016/09/19/controlling-the-order-of-script-resources-e-g-jquery-with-a-custom-viewrootrenderer/

Option 2. Removing the AMD loader before loading scripts

There is an xsnippet which explains how to remove and then restore the amd loader so that a jquery plugin will load https://openntf.org/xsnippets.nsf/snippet.xsp?id=hack-to-use-jquery-amd-widgets-and-dojo-together

Sven had already made a similar solution to mine above (viewRootRenderer) in which you can specify which scripts will need the amd loader disabled and it will do this for you, it is available here http://hasselba.ch/blog/?p=2070

Option 3 : modify javascript of the jquery plugin (datatables)

Mark Roden demonstrated this on his blog. I don't really like doing it but hey it works! https://xomino.com/category/jquery-in-xpages/

Let me know if any of this works! I hope I'm right, with javascript I never know...



来源:https://stackoverflow.com/questions/41711083/trying-to-avoid-multiple-calls-to-jquery-in-a-domino-xpage

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!