2013-11-20 16 views
1

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

我看不到这个属性。

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

装载容器时,我可以添加一个后记方法

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

但这火灾。

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

@ Campl3r我认为这是很清楚的提问者想要做什么(添加目标属性到链接) –

+0

据我所知,唯一的解决方案是创建自己的自定义节点,它支持'目标',通过扩展com.ibm.xsp.extlib.tree.complex.ComplexLeafTreeNode然后你可以使用这个新的节点随处可以使用leafNode,包括WidgetContainer中的DropDownMenue。 –

+0

我想在新窗口中打开网址。从小部件容器中的下拉功能 –

回答

2

basicLeafNode当前不提供目标属性。你有2个疗程的作用:

  • 实现自己的自定义节点迈克尔建议(硬)
  • 链路上使用类如“newpageopen”并添加一个onPageReady脚本,该脚本选择所有具有calpage newpageopen的元素,并将目标属性添加到结果HTML中。

事情是这样的:

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

希望帮助;

1

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

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

您可能会遇到的一个问题是,由XPages生成的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>标签。您将不得不根据生成的输出来修改它。

正如我所说的不方便。另外我还没有测试过这个代码。

2

为了使解决方案的时间长一点的这个名单这里粉粉至极不需要道场或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> 
+0

感谢您发布此!它对我很好。 –