Fonctions Javascript

Appel ajax simple

Le bouton

Créer un bouton pour appeler une action avec des paramètres. Importer la librairie commune:

from ead2.backend.actions.lib.widgets import ajax

Construction d’un appel ajax depuis une classe Action:

href = ajax.call(self.server_nb, self.name, container='div_container_retour', option1='1', 'option2'='2')

Cette fonction:

  • appelle l’action self.name du serveur numéro self.server_nb (numéro dans l’agrégateur)
  • les options option1=‘1’, option2=‘2’
  • le retour sera placé dans la balise d’id ‘div_container_retour’ (si elle n’existe pas, la balise ‘content’ sera utilisée)

Nous avons désormais un lien javascript permettant d’appeler notre action. Pour la création du bouton consultez:

Boutons

Note

ajax.call(server_nb, action_name, container=None, only=True, js_args=False, `*`*args)
Paramètres:
  • server_nb – le numéro de serveur
  • action_name – le nom de l’action à appeler
  • container – id de la balise qui sert de container au retour
  • only – Si il faut l’attribut ‘javascript:’ devant le lien
  • js_args – True si les arguments sont des fonctions javascripts (pas de ‘’)
  • `*`*args

    les arguments de la requête

La récupération

Pour récupérer l’appel de ce bouton, il faut d’abord que les options option1 et option2 soient autorisées. Dans l’entête de notre classe Action:

request = Dict(default={}, doc="arguments de la requete en cours cote frontend",
               keys=['server', 'action', 'option1', 'option2'])

Récupération dans l’Action de nom self.name, dans la méthode execute de notre Action:

def execute(self):
    params, self.server_nb = tools.get_request(self.request)
    if params.has_key('option1') and params.has_key('option2'):
        option1 = params['option1'][0]
        option2 = params['option2'][0]
        return self.send_frag({'message':'Appel ajax avec pour option option1: %s, et option2: %s' % (option1, option2)})

Dans le template de retour on pourra afficher notre message:

#if $is_defined('message'):
<h1>$message</h1>
#end if

Validation de formulaire en Ajax

Construction du lien href

Dans l’Ead2, les validation de formulaire se font par ajax, nous n’utilisons pas du tout la méthode submit, les boutons de validations sont donc des liens (balise html a)

Importer la librairie commune:

from ead2.backend.actions.lib.widgets import ajax

Récupérer le numéro de serveur:

def execute(self):
    params, self.server_nb = tools.get_request(self.request)

Construction du lien pour la validation et le passage en xmlhttp, dans la méthode execute d’une classe Action:

href = ajax.valid(self.server_nb, self.name, ['monformulaire1', 'monformulaire2'], container='div_valid_message')

Vous avez alors un lien javascript qui va valider les formulaires monformulaire1 et monformulaire2, et envoyer le résultat en Ajax à l’action self.name du server numéro self.server_nb de l’agrégateur

Vous pouvez ensuite construire un bouton avec le lien que vous venez de créer, conultez: Boutons

Note

ajax.valid(server_nb, action_name, formnames=[], container=None, only=True, `*`*params)
Paramètres:
  • server_nb – numéro de serveur
  • action_name – nom de l’action
  • formnames=[] – Liste des formulaires à valider (leur id)
  • container – id de la balise qui sert de container au retour
  • only – Si il faut l’attribut ‘javascript:’ devant le lien
  • `*`*params

    les arguments passés à côté du formulaire

Validation du formulaire

Dans l’entête de votre fichier importer les outils de formatage de formulaire:

from ead.backend.actions import tools

Dans l’entête de la classe Action, il va falloir autoriser les formulaire monformulaire1 et monformulaire2:

form_result = Dict(default={}, doc='retour de formulaire', keys=['monformulaire1', 'monformulaire2'])

La balise self.form_result de votre action contient désormais les données des formulaires validés. Formatons les données du formulaire validé:

formulaire1 = tools.format_form_result(self.form_result['monformulaire1'])
formulaire2 = tools.format_form_result(self.form_result['monformulaire2'], check=True)

Les résultats formulaire1 et formulaire2 sont des dictionnaires de couple {clé:valeur} ou clé est l’attribut name de la balise et value l’attribut value. Ils sont encodés dans le bon encodage et les valeurs ‘true’ ou ‘false’ sont transformés en True et False.

Pour une balise select avec l’option multi activée, les options sont renvoyées sous forme de liste.

Note

L’option check permet de spécifier comment on désire recevoir les checkboxs et radio dans notre formulaire validé, elle peut prendre les valeurs:

  • False (valeur par défaut): {name:value} pour les balises cochées, {} sinon
  • True: {‘name’:’value’} selon si elles sont checkés ou pas
  • 2 : {‘name’:True} si la balise est cochée, {‘name’:value} sinon

Cela paraît un peu compliqué mais permet de nombreuses manipulations, la valeur par défaut convient dans 90% des cas. Pour les autres balises du formulaire l’option check ne change rien.

Table des matières

Sujet précédent

Widget Communs

Sujet suivant

Commandes systèmes

Cette page