2014-06-06 2 views
0

Je voulais savoir comment pouvons-nous écrire validateur pour aui: sélectionnez le champ qui est dans la catégorie Autofield.Validator pour aui: sélectionnez avec autofield dans Liferay

C'est ma structure du code:

for(loop total number of items) 
{ 
// CREATE aui select, and aui inputs by appending the index 
} 

Il n'y a pas de problème avec la fonctionnalité de autoFields. Je suis en mesure de créer des entrées en double lors de la visualisation du formulaire en faisant une boucle sur ma collection d'éléments, et il n'y a également aucun problème lors de "CRÉATION" du formulaire en utilisant l'icône liferay fourni PLUS.

J'ai aui: sélectionnez l'élément dans le conteneur, qui sera dupliqué selon la fonctionnalité Autofield. Comment puis-je fournir un validateur pour cet élément aui: select. ?

+0

Je voudrais également inclure que vous avez [demandé] (http://www.liferay.com/community/forums/-/message_boards/message/38630011?_19_redirect=http%3A%2F%2Fwww.liferay.com% 2Fcommunity% 2Fforums% 2F-% 2Fmessage_boards% 2Fsearch% 3F_19_keywords% 3Dautofields% 26_19_searchCategoryId% 3D0% 26_19_breadcrumbsCategoryId% 3D0% 26_19_redirect% 3Dhttp% 253A% 252F% 252Fwww.liferay.com% 252Fcommunity% 252Fforums% 252F-% 252Fmessage_boards% 252Fmessage% 252F15088039% 26_19_formDate% 3D1402068697228) la question sur les forums liferay. – Origineil

+0

Les champs font-ils partie d'un formulaire? – Origineil

+0

Oui Origineil, les champs font partie du formulaire –

Répondre

1

En supposant un certain « modèle » <aui:select> existe au sein de votre forme similaire à:

<aui:select id="elementIdPrefix0" name="elementIdPrefix0" label="Number" showEmptyOption='true' > <!-- options go here --></aui:select> 

Dans votre auto-fields, vous devrez fournir un écouteur d'événement pour l'événement onclone. Dans le rappel vous recherchez le <aui:select> à partir du nœud de conteneur de ligne qui vient d'être créé (passé dans le rappel en tant que paramètre).

<script> 
    AUI().use('liferay-auto-fields', 'aui-form-validator', function(A){ 

    //Setup rules 
    var elementIdPrefix = '<portlet:namespace />elementIdPrefix', 
     myRules = {}, 
     rulesRepository = {}; 

     rulesRepository[elementIdPrefix] = {required:true}; 
     myRules [elementIdPrefix + '0'] = rulesRepository[elementIdPrefix]; 

     //Define validator 
     var validator = new A.FormValidator({ 
          boundingBox: '#<portlet:namespace />myForm', 
          rules: myRules 
          }); 

    new Liferay.AutoFields({ 
    contentBox: '#my-fields', 
    fieldIndexes: '<portlet:namespace />indexes', 
    on: { 
     'clone': function(container){ 

      //Lookup the clone 
      AUI().all('[name^=<portlet:namespace />elementId]').each(function(node, index){ 

      if(container.row.contains(node)){ 
       console.log("Assign to " + node.get('id')) 
       //inject the rules 
       myRules [node.get('id')] = rulesRepository[elementIdPrefix] 
      } 
      }) 
     } 
    } 
}).render(); 
}); 

</script> 

Idéalement, vous devriez être en mesure d'utiliser un sélecteur d'enfant pour obtenir le nœud à l'intérieur du conteneur clone. J'ai dû fournir un moyen différent puisque je ne pouvais pas obtenir cette méthode pour travailler. La raison pour laquelle je peux utiliser mon approche est due au fait que je sais ce que le elementIdPrefix est. Pour pouvoir donner l'exemple, je suis allé de l'avant et j'ai profité de ce fait.

Pour une approche plus dynamique, un sélecteur tel que myNode.one('> selectorString'); devrait être utilisé.

+0

Merci Origineil, je vais sauvegarder ceci pour ma future référence. Ce que j'ai fait était une sorte de piratage. J'ai créé un champ de saisie avec le même nom que le champ "select" ;-) et je l'ai défini comme "caché" pour lequel j'utilise une fonction de validation personnalisée où je vérifie la valeur du champ "select". Bien sûr, va vérifier avec votre approche quand je trouve le temps. Je le marque comme "Accepté" –

+0

Salut, y at-il un moyen d'appliquer un validateur personnalisé sur autofield? –

+0

Ici, ça marche pour moi. https://stackoverflow.com/a/46001206/4587294 –

Questions connexes