XPages中 - 如何设置从客户端的JavaScript一个范围变量?(xpages - how

2019-08-21 17:43发布

我试图从设置Client端JavaScript中的XPages范围变量。 我有一个包含几个部分,其显示或使用道场隐藏一个XPage。 在此XPage中我有一个按钮,用于执行一些服务器端JavaScript。 一旦按钮,执行后面的SSJS,默认情况下是可见的XPage的部分是再次可见,而不是这是立即可见之前被点击的按钮部分。 我想这是可见之前被点击的按钮按钮背后的SSJS已被执行之后也可见部分。

为此,我曾想过使用范围变量-使用客户端的JavaScript来计算的XPage这是目前可见的哪个部分,在一个范围变量设置这个值和读取的范围变量onClientLoad XPage上的事件,再次使本节可见(并隐藏所有其他部分)。 但是,我没有发现任何来自客户端的JavaScript设置范围变量的方式。 我曾尝试加入

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

onClick按钮的客户端事件,但不管按钮是否被点击或不此设置的范围可变。

XPages中之前,我已经使用了查询字符串从一个页面传递变量到另一个。 我现在如何才能做到这一点?

Answer 1:

另一种方法:也许你并不需要范围的变量在所有的,如果你只是想隐藏的东西,你可以设置它的样式属性“显示:无”。

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

然后你可以使用一个按钮下面CSJS:

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



Answer 2:

你不能设置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对象访问不同的参数。 铁如果您在CSJS添加参数 ...

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

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

param.get("value");


Answer 3:

取决于你的使用情况。 如果你想与部分/完全刷新设置,你可以简单地把隐藏编辑成XP,将其绑定到anyScope.variable_name与CSJS其值设置:

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

每次刷新会提交其价值模型,将在范围的变量可用。

另一种选择是在任何地方使用事件处理程序与SSJS基础上隐藏的输入值或提交的值设定范围的变量,在埃里克森的回答说。



Answer 4:

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>


文章来源: xpages - how to set a scope variable from client side javascript?