Tapestry 5.4不止一次调用jquery
我正在尝试将Bootstrap popover集成到我的Tapestry 5.4-alpha-14应用程序中。 我是Tapestry的新手,我不知道如何在那里使用javascript。
我的问题是,当刷新区域时,我想在区域循环中的每个元素上显示Bootstrap popover。 首先,我在区域中没有元素,然后用户提交表单并加载一个元素,然后进行一些更多的用户交互,另一个元素被加载,依此类推…我想在每个加载的元素上显示popover在循环。 使用下面的代码我只能在加载第一个元素时显示弹出窗口,但是当加载第二个元素时,弹出窗口丢失了。 我还注意到第二次加载时没有调用.js代码。
部分.tml代码:
...
.java代码的一部分:
void onSuccess() { ... ajaxResponseRenderer.addRender(selectedPagesZone).ajaxResponseRenderer.addCallback(new JavaScriptCallback() { public void run(JavaScriptSupport javaScriptSupport) { javaScriptSupport.require("popover"); } });
popover.js代码:
(function ($) { options = { placement:'right', trigger: 'hover', container: 'body', html: true } $('.pop').popover(options); $('.pop').popover('show'); })(window.jQuery);
我很感激你能给我的任何帮助。
require.js只会执行一次js的主体。 您应该定义一个配置一次但多次执行的函数。
popover.js
define(["jquery"], function($) { var privateFunc = function(args) { options = { placement:'right', trigger: 'hover', container: 'body', html: true }; $('.pop').popover(options); $('.pop').popover('show'); }; return { publicFunc: privateFunc}; });
java代码
ajaxResponseRenderer.addCallback(new JavaScriptCallback() { public void run(JavaScriptSupport javaScriptSupport) { JSONObject args = new JSONObject("foo", "bar"); javaScriptSupport.require("popover").invoke("publicFunc").with(args); } });
有关详细信息,请参见此处