我遇到过一个需要在javascript中使用renderURL的场景。 我有一个包含许多行数据的aui-datatable。单击任何行后,我需要调用渲染URL来加载下一个视图。
通常,我曾经在按钮的情况下通过在onClick事件中编写renderURL来使用renderURL。即,
aui:按钮名称=" TestButton"的onClick ="<%= testRenderURL.toString()%>"
但在当前场景中,控件将位于我的数据表的委托函数中,即单击处理函数,即: -
Y.delegate('click', function(e) {
var target = e.currentTarget;
record = this.get('recordset').getRecord(target.get('id')).getValue();
alert(record.name);
//HERE I NEED TO CALL RENDER URL AND LOAD NEXT JSP PAGE
// after fetching current row values. i.e, send record.name to next jsp file
}, '#myTable', 'tr', dt);
答案 0 :(得分:3)
这可能会有所帮助。我使用Liferay 6.1.2实现了它。我想根据点击的按钮,使用Javascript生成一个PortletURL(在我的情况下为RenderURL)。我在JSP文件中所做的是以下内容:
1)我有四个按钮:
<aui:button value="Button 1" name="button1"
onClick='<%=renderResponse.getNamespace() + "getButtonId(1);"%>'/>
<aui:button value="Button 2" name="button2"
onClick='<%=renderResponse.getNamespace() + "getButtonId(2);"%>'/>
<aui:button value="Button 3" name="button3"
onClick='<%=renderResponse.getNamespace() + "getButtonId(3);"%>'/>
<aui:button value="Button 4" name="button4"
onClick='<%=renderResponse.getNamespace() + "getButtonId(4);"%>'/>
2)我使用Javascript生成了PortletURL,然后设置了之后要转发的新JSP页面:
<aui:script use="liferay-portlet-url">
Liferay.provide(
window,
'<portlet:namespace/>getButtonId',
function(id) {
var renderURL = Liferay.PortletURL.createRenderURL();
renderURL .setPortletMode("view");
renderURL .setWindowState("normal");
renderURL .setPortletId("myPortletId");
renderURL.setParameter("page","new_jsp_page");
renderURL.setParameter("buttonId",id);
window.location.href = renderURL.toString();
}
);
</aui:script>
这可以应用于根据从数据库检索的数据生成许多行的情况。
答案 1 :(得分:2)
AUI().use('liferay-portlet-url', function(A) {
var url=Liferay.PortletURL.createRenderURL();
url.setPortletId('currentPortletId');
url.setParameter('name','value');
A.one(document.createElement('a')).attr('href',url).simulate('click');
})
上面的代码对您有助于实现您的要求。将它放在数据表行的单击事件处理函数中。
注意:只需根据您的要求替换上述代码中的currentPortletId,名称和值,您也可以加载&#39; liferay-portlet-url&#39;模块分开。