xpages - 如何从客户端javascript设置范围变量?

Ton*_*een 1 javascript variables scope xpages xpages-ssjs

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

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

var xyz = "#{javascript:viewScope.put('sectionDisplay','Section')}"
Run Code Online (Sandbox Code Playgroud)

对于onClick按钮的客户端事件,但无论是否单击该按钮,都会设置范围变量.

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

Sve*_*ach 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对象访问不同的参数.如果在CSJS中添加参数,则为Fe ...

XSP.partialRefreshGet( id, {
    params: { 'value': 'some string'}
});
Run Code Online (Sandbox Code Playgroud)

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

param.get("value");
Run Code Online (Sandbox Code Playgroud)


Fra*_*uth 6

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

  var field = document.getElementById("#{id:hiddenInput1}");
  field.value = "new Value";
Run Code Online (Sandbox Code Playgroud)

每次刷新都会将其值提交给模型,并且可以在范围变量中使用.

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