如何从客户端javascript打开扩展库对话框? 我用
XSP.openDialog("#{id:myDialog}");
如果我在xPage本身的某处调用它,它的工作原理很完美...... 但是如何从客户端javaScript库打开对话框?
Error: TypeError: dlg is undefined
我需要从客户端javascript库中的函数调用它:
<a onclick="return showMyDialog();">Click it</a>
谢谢...
答案 0 :(得分:6)
我想问题是你的函数是在XPage本身之外的资源中定义的。因此,#{id:myDialog}
未被正确解析。
我建议你将对话框的id传递给你的函数。因此,请改为定义您的函数:
function showDELinks(dialogId){ XSP.openDialog(dialogId); return true; }
然后你可以这样调用你的函数:
<a onclick="return showDELinks("#{id:myDialog}");">Click it</a>
<强>更新强>
这个简单的演示有效。这是XPage:
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:this.resources>
<xp:script src="/csLib.js" clientSide="true"></xp:script>
</xp:this.resources>
<a onclick="return showDELinks('#{id:myDialog}');">Click it</a>
<xe:dialog id="myDialog"></xe:dialog>
</xp:view>
这是csLib:
function showDELinks(dialogId){ XSP.openDialog(dialogId); return true; }
你的代码还有其他错误。
答案 1 :(得分:1)
"#{id:myDialog}"
只有在它是实际XPage或自定义控件的一部分时才被解释。在脚本库中没有解释。
我一直使用CSJS库和一个声明如下类的模型:
if(!myDialog) {
var myDialog = {
id : "",
show : function() {
XSP.openDialog(this.id);
},
close : function() {
XSP.closeDialog(this.id);
}
}
}
然后在XPage或自定义控件上我放了一个像这样的scriptBlock:
<xp:scriptBlock>
<xp:this.value><![CDATA[
myDialog.id = "#{id:myDialog}";
]]></xp:this.value>
</xp:scriptBlock>