我想从扩展程序库中为Widget容器添加basicLeafNode的目标(例如_blank)属性。
我没有看到这个属性。
相反,我可以使用onClick属性并返回一个URL。但是我仍然没有定义目标。
我可以添加一个postScript方法
var target = url;
view.postScript("window.open('"+target+"','_blank')")
但是在装入容器时会触发。
答案 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个行动方案:
这样的事情:
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>
标记。您必须根据生成的输出修改它。
正如我说的那样不方便。我还没有测试过这段代码。