从客户端javascript打开扩展库对话框

时间:2014-08-08 13:58:27

标签: javascript xpages

如何从客户端javascript打开扩展库对话框? 我用

XSP.openDialog("#{id:myDialog}");

如果我在xPage本身的某处调用它,它的工作原理很完美...... 但是如何从客户端javaScript库打开对话框?

Error: TypeError: dlg is undefined

我需要从客户端javascript库中的函数调用它:

  <a onclick="return showMyDialog();">Click it</a>

谢谢...

2 个答案:

答案 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>