1

我遇到了一个场景,我需要在 javascript 中使用 renderURL。我有一个包含许多数据行的 aui 数据表。单击任何行后,我需要调用渲染 URL 来加载下一个视图。

通常,我曾经通过在 onClick 事件中编写 renderURL 来在按钮的情况下使用 renderURL。IE,

aui:button name="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); 
4

2 回答 2

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>

这可以应用于根据从数据库检索的数据生成许多行的情况。

于 2014-10-30T16:04:29.743 回答
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、名称和值,您也可以单独加载“liferay-portlet-url”模块。

于 2014-06-10T11:39:04.290 回答