在Widget容器中添加dropdownnode的目标属性

时间:2013-11-20 10:53:49

标签: xpages xpages-extlib xpages-ssjs

我想从扩展程序库中为Widget容器添加basicLeafNode的目标(例如_blank)属性。

我没有看到这个属性。

相反,我可以使用onClick属性并返回一个URL。但是我仍然没有定义目标。

我可以添加一个postScript方法

var target = url;
view.postScript("window.open('"+target+"','_blank')")

但是在装入容器时会触发。

  • 我可以在不使用onClick属性的情况下添加目标属性吗?
  • 如果我使用onClick属性,我应该使用哪种方法,或者如何防止在加载容器时执行postscript?

3 个答案:

答案 0 :(得分:3)

要使这个解决方案列表更长一点,另一个不需要dojo或jquery:

而不是像SSJS那样使用你的代码:

var target = url;
view.postScript("window.open('"+target+"','_blank')")

您可以使用客户端代码并在#{javascript:}'中添加SSJS代码,我认为这是此问题的最短解决方案。这是一个硬编码的例子:

        <xe:basicLeafNode>
            <xe:this.onClick><![CDATA[window.open('#{javascript: return "http://www.google.com";}','_blank');]]></xe:this.onClick>
        </xe:basicLeafNode>

以上示例也适用于viewScope变量或SSJS funktions:

        <xe:basicLeafNode>
            <xe:this.onClick><![CDATA[window.open('#{javascript: return viewScope.url;}','_blank');]]></xe:this.onClick>
        </xe:basicLeafNode>

答案 1 :(得分:2)

basicLeafNode当前不提供目标属性。你有2个行动方案:

  • 按照Michael建议(硬)
  • 实现您自己的自定义节点
  • 在链接上使用一个类,例如“newpageopen”并添加一个onPageReady脚本,该脚本使用calss newpageopen选择所有元素,并将target属性添加到生成的HTML中。

这样的事情:

require(["dojo/ready","dojo/query"], function(ready){
    ready(function(){
        dojo.query("a.newpageopen").attr("target", "_blank");
    });
 });

希望有所帮助;

答案 2 :(得分:1)

您可以使用JavaScript添加target属性。这是一种不方便的方式,但可行。

您可以使用dojo.query查询由Widget容器上的 basicLeafNode生成的HTML输出。获得<a>节点后,您可以使用dojo.attr添加属性。

您可能遇到的一个问题是,XPage生成的ID包含字符:,这不会有效you would have to escape it

function escapeColon(controlID) {
    return controlID.replace(/:/g, "\\3A");
}

所以你的代码应该是这样的:

dojo.addOnLoad(function() {
    dojo.attr(dojo.query(escapeColon("#{id:ID_of_basicLeafNode}") + " > a")[0], "target", "_blank");
});

代码escapeColon("#{id:ID_of_basicLeafNode}") + " > a"会生成CSS selector。在这里,我假设Widget容器上的 basicLeafNode将生成类似此<div id="_id1:basicLeafNode"><a href="...的内容。因此,CSS选择器将搜索具有该ID的标记,并在其中搜索<a>标记。您必须根据生成的输出修改它。

正如我说的那样不方便。我还没有测试过这段代码。