我很难让dynamicContent控件按照我希望的方式工作。我在pasteBin中找到了这段代码,我认为它可能就是我需要的东西,但我想在实现它之前了解它的作用。
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:button value="Switch!" id="switchButton">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="dynamicCustomControl">
<xp:this.action><![CDATA[#{javascript:viewScope.controlName = 'cc_test2.xsp';
getComponent('dynamicCustomControl').show(null)}]]></xp:this.action>
</xp:eventHandler></xp:button>
<xe:dynamicContent id="dynamicCustomControl">
<xp:include id="customControlInluder">
<xp:this.pageName>
<![CDATA[${javascript:viewScope.controlName||"cc_test1.xsp"}]]>
</xp:this.pageName>
</xp:include>
</xe:dynamicContent>
</xp:view>
特别是我不理解这一行的语法:
<![CDATA[${javascript:viewScope.controlName||"cc_test1.xsp"}]]>
我更喜欢使用viewScope.get(“controlName”)而不是简短的viewScope.controlName,但我不明白||的意义在这行代码中。
也是
行<xp:include id="customControlInluder>
可能是一个无关紧要的错字。
这个过程看起来相当简单,看起来它会为我完成这项工作。在走这条路之前,我只想确保理解它。
编辑和更新---
这个非常简短的代码片段可能只是最好的秘密之一。我刚刚完成了它,并且使用dynamicCustomControl显示的每个自定义控件都包含一个dynamicContent控件。因此能够非常好地在dynamicContent中嵌入dynamicContent。到目前为止,我从未真正能够正常工作。现在它的工作非常顺利,而且操作简便。弄乱。感谢您的评论和帮助。
答案 0 :(得分:4)
JavaScript代码viewScope.controlName||"cc_test1.xsp"
返回viewScope.controlName
的值,如果它不是
否则返回&#34; cc_test1.xsp&#34;。您可以找到详细解释here。
这是
的简短方法viewScope.controlName ? viewScope.controlName : "cc_test1.xsp"
或
if (viewScope.controlName) {viewScope.controlName} else {"cc_test1.xsp"}
<xp:include id="customControlInluder">
中的ID未在代码中使用,因此它的调用方式并不重要,尽管&#34; customControlIncluder&#34;听起来会好得多。
我总是使用短版本作为范围变量来获取和设置值,并且尚未遇到问题。
答案 1 :(得分:1)
Bill,认为它只是说“使用viewscope控件名称,如果为null则使用cc_test1.xsp”。如果第一种情况为真,则不评估第二种情况。