我正在尝试将Bootstrap popover集成到我的Tapestry 5.4-alpha-14应用程序中。我是Tapestry的新手,我不知道如何在那里使用javascript。
我的问题是,我想在刷新区域时在区域循环中的每个元素上显示Bootstrap popover。首先,我在区域中没有元素,然后用户提交一个表单并加载一个元素,然后进行一些更多的用户交互,另一个元素被加载,依此类推......我想在每个加载的元素上显示popover在循环。使用下面的代码我只能在加载第一个元素时显示弹出窗口,但是当加载第二个元素时,弹出窗口就丢失了。我还注意到第二次加载时没有调用.js代码。
.tml代码的一部分:
<t:zone t:id="selectedPagesZone" id="selectedPagesZone">
<div class="well" t:type="Loop" t:id="selectedLoop" t:source="selectedPages" t:value="item">
<div class="pop" data-toggle="popover" rel="popover" data-placement="top" data-container="body" data-content="Content" title="Title">
...
</div>
</div>
</t:zone>
.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);
我很感激你能给我的任何帮助。
答案 0 :(得分:1)
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);
}
});
有关详细信息,请参阅here