2015-11-15 2 views
1

J'utilise Liferay 6.2-ce-ga4, en essayant d'incorporer des renderURL personnalisés dans une colonne aui-datatable. Le code suivant fonctionne, sauf lorsque je tente d'invoquer la ligne de code suivante à partir d'une fonction de mise en forme de colonne:Rendu de rendu dynamique dans aui-datable

var renderURL = Liferay.PortletURL.createRenderURL(); 

Il n'y a pas de code d'erreur généré dans la console Eclipse lorsque vous appelez ce code (comme je lance Liferay de au sein d'Eclispe). Tout ce que je peux vous dire, c'est que lorsque je commente la ligne ci-dessus, j'obtiens un DataTable correctement généré, mais après le décommissionnement de la ligne, le DataTable ne s'affiche tout simplement pas.

La pleine page de code est le suivant

<%@ page import="org.json.simple.JSONArray"%> 
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%> 
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%> 
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%> 
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util"%> 
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> 

<script src="http://cdn.alloyui.com/2.0.0/aui/aui.js"></script> 
<link href="http://cdn.alloyui.com/2.0.0/aui-css/css/bootstrap.min.css" rel="stylesheet"></link> 

<portlet:defineObjects /> 

<% 
    JSONArray involvedParties = (JSONArray) renderRequest.getAttribute("involvedPartyDetails"); 
%> 

<aui:script> 
    YUI().use('aui-datatable', 'datatable-sort', 'liferay-portlet-url', function(Y) { 

     var columns = [ { 
      label : 'Involved Party Name', 
      key : 'name', 
      formatter : function(o) { 
       // var renderURL = Liferay.PortletURL.createRenderURL(); 
       return '<a href="http://www.cnn.com/">' + o.data.name + '</a>'; 
      }, 
      allowHTML : true, 
      sortable : true 
     } ]; 

     var data = <%=involvedParties%> 
     var dataTable = new Y.DataTable({ 
      columns : columns, 
      data : data, 
      scrollable : "y", 
      height : "500px" 
     }).render('#myDataTable'); 
    }); 
</aui:script> 

<div id="myDataTable"></div> 

Mon Liferay-portlet.xml est donnée comme suit:

<?xml version="1.0"?> 
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd"> 

<liferay-portlet-app> 
    <portlet> 
     <portlet-name>involved-party-list</portlet-name> 
     <icon>/icon.png</icon> 
     <header-portlet-css>/css/main.css</header-portlet-css> 
     <footer-portlet-javascript> 
      /js/main.js 
     </footer-portlet-javascript> 
     <css-class-wrapper> 
      involved-party-list-portlet 
     </css-class-wrapper> 
     <add-default-resource>true</add-default-resource> 
    </portlet> 
    <role-mapper> 
     <role-name>administrator</role-name> 
     <role-link>Administrator</role-link> 
    </role-mapper> 
    <role-mapper> 
     <role-name>guest</role-name> 
     <role-link>Guest</role-link> 
    </role-mapper> 
    <role-mapper> 
     <role-name>power-user</role-name> 
     <role-link>Power User</role-link> 
    </role-mapper> 
    <role-mapper> 
     <role-name>user</role-name> 
     <role-link>User</role-link> 
    </role-mapper> 
</liferay-portlet-app> 

Toutes les suggestions sur la façon de construire une dynamique renderURL pour chaque ligne la table de données est appréciée.

En note, j'ai essayé de remplacer YUI() par AUI(), mais cela a aussi pour conséquence que la table de données n'est pas générée dans le navigateur. Des commentaires sur les avantages d'utiliser AUI vs YUI seraient également appréciés.

+0

Également discuté ici: https://www.liferay.com/community/forums/-/message_boards/view_message/63339849 –

Répondre

1

Vous donnez une partie de la réponse vous-même - cependant, il y a quelque chose de plus: <aui:script> rend déjà AUI disponible. Vous pouvez simplement remplacer vos lignes

<aui:script> 
    YUI().use('aui-datatable', 'datatable-sort', 'liferay-portlet-url', function(Y) { 

avec

<aui:script use="aui-datatable,datatable-sort,liferay-portlet-url"> 

et utiliser AUI comme A dans le bloc que cela ouvre. Pas besoin d'un bloc YUI ou AUI supplémentaire dans cette balise.

+0

Merci, cela a certainement fonctionné. –

1

Je l'ai utilisé « Outils de développement de la console » Chrome pour voir la sortie, et je reçois le message d'erreur suivant:

yui: NOT loaded: liferay-portlet-url 

Il semble que je dois utiliser AUI() au lieu de YUI() pour tirer parti des extensions Liferay .