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之前,我会使用查询字符串将变量从一个页面传递到另一个页面.我现在该怎么做?
您不能以这种方式设置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)
取决于您的用例.如果你想用部分/完全刷新设置它,你可以简单地将隐藏编辑放入XP,绑定到它anyScope.variable_name并用CSJS设置它的值:
var field = document.getElementById("#{id:hiddenInput1}");
field.value = "new Value";
Run Code Online (Sandbox Code Playgroud)
每次刷新都会将其值提交给模型,并且可以在范围变量中使用.
另一种选择是在SSJS的任何地方使用事件处理程序,根据隐藏的输入值或提交的值设置范围变量,如Sven的答案中所述.