1

我正在尝试从客户端 JavaScript 设置 XPages 范围变量。我有一个 XPage,其中包含几个使用 Dojo 显示或隐藏的部分。在这个 XPage 上,我有一个执行某些服务器端 JavaScript 的按钮。一旦按钮后面的 SSJS 执行,默认情况下可见的 XPage 部分将再次可见,而不是在单击按钮之前立即可见的部分。我希望在单击按钮之前可见的部分在按钮后面的 SSJS 执行后也可见。

为此,我考虑过使用范围变量 - 使用客户端 JavaScript 计算当前可见的 XPage 的哪个部分,在范围变量中设置此值并在onClientLoadXPage 事件中读取范围变量以再次执行此操作部分可见(并隐藏所有其他部分)。但是,我发现无法从客户端 JavaScript 设置范围变量。我试过添加

var xyz = "#{javascript:viewScope.put('sectionDisplay','Section')}"

onClick按钮的客户端事件,但这会设置范围变量,而不管按钮是否被单击。

在 XPages 之前,我会使用查询字符串将变量从一个页面传递到另一个页面。我现在该怎么做?

4

4 回答 4

6

您不能以这种方式设置 CSJS 变量:如果您将此代码添加到您的 CSJS,它将在发送到浏览器之前进行计算。这就是为什么无论单击按钮如何都设置变量的原因。

但是您可以将一些 SSJS 代码添加到设置 viewScope 变量的按钮中。您可以使用此处所述的参数从浏览器发送值:http: //xpageswiki.com/web/youatnotes/wiki-xpages.nsf/dx/Work_with_events_and_partial_or_full_refresh#Run+a+partial+update+from+client+javascript

编辑:

您可以使用SSJS 中的param对象访问不同的参数。Fe 如果您在 CSJS 中添加参数值...

XSP.partialRefreshGet( id, {
    params: { 'value': 'some string'}
});

...您可以像这样访问 SSJS 中的参数:

param.get("value");
于 2013-04-11T08:45:49.787 回答
6

取决于您的用例。如果你想设置它的部分/完全刷新,你可以简单地将隐藏编辑放入 XP 中,将其绑定anyScope.variable_name并使用 CSJS 设置其值:

  var field = document.getElementById("#{id:hiddenInput1}");
  field.value = "new Value";

每次刷新都会将其值提交给模型,并将在作用域变量中可用。

另一种选择是在 SSJS 的任何地方使用事件处理程序来根据隐藏的输入值或提交的值设置范围变量,如 Sven 的回答中所述。

于 2013-04-11T11:54:48.833 回答
2

另一种方法:也许你根本不需要范围变量,如果你只是想隐藏一些东西,你可以将它的样式属性设置为“display:none”。

例如,你有这个 div:<xp:div id="mydiv">...</xp:div>

然后您可以在按钮中使用以下 CSJS:

dojo.byId("#{id:mydiv}").style.display="none"

于 2013-04-11T13:17:02.570 回答
1
XSP.partialRefreshGet( id, {
    params: { 'value': 'some string'}
});

... you can access the parameter in SSJS like this:

param.get("value");

我将 UNID 从网格传递到对话框。我可以获得 param.get('unid') 但无法将其设置为文档数据源 unid。这样字段将填充来自后端文档的值。有很多字段,所以我想以某种方式填充该数据源,而不必在每个字段中写入值。如何让文档数据源识别 param.unid?我正在尝试使用您描述的隐藏输入,但该值也未提交。那可能吗?

XSP.partialRefreshGet(dialogId,
{
    params: xspParams,
    onStart: function(){
        //dojo.style(loadingGifId,'display','block');
        XSP.getElementById("#{id:inputText1}").innerHTML = unid; //not working
        XSP.getElementById("#{id:inputText1}").value = unid; //not working either
    },
    onComplete: function(){
        dijit.byId(dialogId).show();
        //dojo.style(loadingGifId,'display','none');    
}});


<xp:panel id="dialog">
    <input id="inputText1"
        value="#{javascript:sessionScope.personUNID;}">
    </input>

    <xp:this.data>
        <xp:dominoDocument var="docPerson" action="editDocument"
            formName="fUserName">
            <xp:this.documentId><![CDATA[#{javascript:sessionScope.personUNID ;}]]></xp:this.documentId>
        </xp:dominoDocument>
    </xp:this.data>

    <xp:inputText id="cfParams"
        value="#{javascript:param.get('unid');}">
    </xp:inputText>
</xp:panel>
于 2015-08-07T11:33:21.460 回答