Malin
Malin

Reputation: 697

csjs calling ssjs from script library not working as expected

I have a client-side script in which I initiate some SSJS to collect string values that reside in a strings.properties file:

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;}    
}

This works fine. But when I store the script in a csjs library my text messages becomes: #{javascript:strings['empty']} and #{javascript:strings['confirm']}. What am I doing wrong?

Upvotes: 1

Views: 272

Answers (1)

Knut Herrmann
Knut Herrmann

Reputation: 30960

You can't put CSJS code with SSJS parts into a CSJS library. The SSJS part gets executed on server first and the modificated code is sent to client then. A CSJS library is sent to client unchanged. That's why you see the SSJS code there.

You can add parameters to your function

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

so that the function is pure CSJS code and can be stored in a CSJS library.
You'd call your function in XPage with the parameters:

confirmBeforeDelete("#{javascript:strings['empty']}", "#{javascript:strings['confirm']}", 
                    "#{id:vwPnlDefault}")

Upvotes: 6

Related Questions