使用脚本块进行XPage部分刷新

时间:2016-05-10 12:45:02

标签: javascript jquery xpages xpages-extlib

我试图通过添加一些客户端功能来使我的数据视图看起来更好看。 在这种情况下,我创建了一个脚本,让用户将鼠标悬停在一行上并显示其详细信息。 结构看起来像这样:

Structure

脚本块包含一些基本的jquery:

function x$(idTag){
    idTag = idTag.replace(/:/gi, "\\:");
    return("#"+idTag);
}

var dataView = x$('#{id:dataView1}');

var detail;
$(dataView + ' > table > tbody > tr').mouseenter(function (e) {
    detail = $(this).attr('id').replace(':_row', '_detail');
    detail = x$(detail);

    $(detail).show();
});

$(dataView + ' > table > tbody > tr').mouseleave(function () {
    $(detail).hide();
});

一切正常,直到我点击其中一个行展开/折叠按钮,此时脚本代码停止工作。 我的猜测是它与部分刷新有关,当我在数据视图中展开或折叠某个级别时会发生这种情况,并且它不会重新加载脚本块或重新加载错误。 如果我关闭部分刷新它继续工作,但当然整页刷新只是为了扩展或折叠一行是太慢而不现实可用

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

jQuery代码仅在它可以在页面上看到的项目上运行 - 您需要更改选择条件,以便它作为委派事件运行。在这种情况下,无论何时在数据视图上移动mouseevent,它都会检测触发事件的选择器,如果匹配,则它将相应地运行。这样它将在所有行上运行,无论它们是否在partialRefresh之前或之后“在页面上”。

http://api.jquery.com/on/

试试这个

$(dataView).on ('mouseenter', 'table > tbody > tr', function (e) {
    detail = $(this).attr('id').replace(':_row', '_detail');
    detail = x$(detail);

    $(detail).show();
});

$(dataView).on('mouseleave', 'table > tbody > tr', function () {
    $(detail).hide();
});

代码未经测试,因为我没有您的环境:)

答案 1 :(得分:0)

感谢另一位消息来源在这里得到了快速帮助。

将dataView和scriptBlock放在面板中,然后将dataView的refreshID设置为面板的ID。