WebFormController

C'est ce qu'une fonction 4D renvoie pour agir sur la page. L'objet est sérialisé dans la réponse puis rejoué côté client : tout ce qu'il transporte se produit après la fin de votre fonction.

Function myAction($vo_POST : Object)->$vo_WebResponse : cs.bspkComponent.WebFormController
    $vo_WebResponse:=cs.bspkComponent.WebFormController.new()
    $vo_WebResponse.sendAlert("success"; BSPK_Translate("Toast_saved"))
    $vo_WebResponse.reloadBlock("myList")

Les méthodes

MéthodeRemarques
sendAlert(type; title; message; duration)Types : success, error, warning, info
sendAlertAfterRedirect(…)Survit à un rechargement : à utiliser quand vous redirigez
reloadBlock(nameOrUuid; options)Un bloc par appel, pas de collection. Rappelez-la pour un autre bloc
redirectToRoute(menuName; lang; params; optionalParams)Route par le nom de menu, pas par l'URL
reloadBlocksWithConditionalDisplay($vo_POST)Réévalue les blocs à affichage conditionnel

Piège : un sendAlert suivi d'une redirection détruit le toast : la page se recharge avant qu'on ait pu le lire. Si le message porte une information, et surtout s'il est la seule explication du rechargement de la page, utilisez sendAlertAfterRedirect.

Les actions brutes

Tout ce qui n'a pas de méthode dédiée s'ajoute dans vc_Action :

$vo_WebResponse.vc_Action.push({vt_Action: "showModal"; vt_BlockName: "myModal"})
$vo_WebResponse.vc_Action.push({vt_Action: "closeModal"; vt_BlockName: "myModal"})

vt_modalId attend un UUID, vt_BlockName attend un nom

Côté client, le traitement de closeModal dans bspk.js résout vt_modalId comme un id HTML, puis comme bspk[data-uuid="…"] : il attend donc un uuid. Y passer un nom de bloc ne ferme rien, en silence : la modale reste ouverte, sans erreur. Seule l'autre branche, sur vt_BlockName, accepte un nom.

// WRONG - modal stays open, no error
$vo_WebResponse.vc_Action.push({vt_Action: "closeModal"; vt_modalId: "myModalBlocName"})
// RIGHT
$vo_WebResponse.vc_Action.push({vt_Action: "closeModal"; vt_BlockName: "myModalBlocName"})

Attention aussi à l'asymétrie avec les événements : une fonction de rendu prend vo_Params.vt_BlocName, alors qu'une action côté serveur prend vt_BlockName.

Une modale n'a pas de titre natif

vt_Title existe dans les propriétés de certaines anciennes modales, mais aucun gabarit ne l'affiche. Placez le titre dans un bloc texte en haut du contenu de la modale. Les propriétés qui sont rendues : vb_closeCross, vb_closeClickOutside, vb_PanelMode, vt_Position, vt_Id.

Remplir une modale avant de l'afficher

BSPK_SET_PROCESS_VAR("vo_SelectedItemData"; {fullName: "John"; amount: 100})
$vo_WebResponse.reloadBlock("myModal")
$vo_WebResponse.vc_Action.push({vt_Action: "showModal"; vt_BlockName: "myModal"})

Posez les données, rechargez le bloc pour qu'il se rende avec elles, puis affichez-le. Afficher d'abord montre l'ancien contenu.

Voir aussi