从脚本库调用ssjs的csjs没有按预期工作

Mal*_*lin 1 xpages xpages-ssjs

我有一个客户端脚本,我在其中启动一些SSJS来收集驻留在strings.properties文件中的字符串值:

function confirmBeforeDelete(){
    var msgEmptySelection = "#{javascript:strings['empty']}";
    var msgConfirm = "#{javascript:strings['confirm']}";
    if(!XSP.isViewPanelRowSelected("#{id:vwPnlDefault}", "col1")) {
        !XSP.alert(msgEmptySelection);
        return false;
    }
    if(!XSP.confirm(msgConfirm)) {return false;}    
}
Run Code Online (Sandbox Code Playgroud)

这很好用.但是当我将脚本存储在csjs库中时,我的短信变为:#{javascript:strings ['empty']}和#{javascript:strings ['confirm']}.我究竟做错了什么?

Knu*_*ann 6

您不能将带有SSJS部分的CSJS代码放入CSJS库中.SSJS部分首先在服务器上执行,然后将修改后的代码发送给客户端.CSJS库不变地发送给客户端.这就是你在那里看到SSJS代码的原因.

您可以为函数添加参数

function confirmBeforeDelete(msgEmptySelection, msgConfirm, vwPnlDefaultId){
    if(!XSP.isViewPanelRowSelected(vwPnlDefaultId, "col1")) {
        !XSP.alert(msgEmptySelection);
        return false;
    }
    if(!XSP.confirm(msgConfirm)) {return false;}    
}
Run Code Online (Sandbox Code Playgroud)

这样该函数就是纯CSJS代码,可以存储在CSJS库中.
您可以使用以下参数在XPage中调用您的函数:

confirmBeforeDelete("#{javascript:strings['empty']}", "#{javascript:strings['confirm']}", 
                    "#{id:vwPnlDefault}")
Run Code Online (Sandbox Code Playgroud)