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); } }); 

有关详细信息,请参见此处