# getJsReferences
La méthode getJsReferences()
permet d'injecter des fichiers JS personnalisés dans le Smart Element.
\Anakeen\Ui\JsAssetReference[] getJsReferences(\Anakeen\Core\Internal\SmartElement $document = null)
Par défaut, les classes Anakeen\Ui\DefaultView
et Anakeen\Ui\DefaultEdit
ne retournent aucun fichier js spécifique.
Pour ajouter un fichier spécifique, il faut indiquer deux éléments :
- l'emplacement du fichier du point de vue du navigateur,
- là ou les fonctions que le fichier à injecter ajoute.
Ces éléments sont ajoutés au sein d'un objet \Anakeen\Ui\JsAssetReference
et la fonction getJsReferences
doit
retourner un tableau indexé de ces objets.
namespace My;
class MyRenderConfigView extends \Anakeen\Ui\DefaultView
{
public function getJsReferences(\Anakeen\Core\Internal\SmartElement $document = null)
{
$js = parent::getJsReferences();
$jsRef = new \Anakeen\Ui\JsAssetReference("/MY/JS/customContact.js");
// Enregistrement du nom de la fonction à utiliser en mode library (par défaut)
$jsRef->addFunctionName("myContactKeyFunction");
$js["myContactKey"] = $jsRef;
return $js;
}
}
Dans MY/Layout/customContact.js
:
import AnakeenController from "@anakeen/user-interfaces/components/lib/AnkController";
AnakeenController.registerFunction("myContactKeyFunction", controller => {
// my code...
});
Les fichiers JS sont injectés dans l'ordre de leur ajout.
Il est possible via l'héritage des rendu de modifier le tableau pour surcharger les fichiers JS.
Trois modes d'injection existent :
library
: Le point d'entrée est une ou plusieurs fonctions qui reçoivent en argument le contrôleur spécifique au rendu de Smart Element ciblé. Il s'agit du mode par défaut. Ces fonctions peuvent retourner une promise, dans ce cas l'exécution du chargement attend la résolution de la Promise avant de reprendre.global
: ce mode est à utiliser pour les librairies ou pour le JS n'ayant pas à intéragir avec le Smart Element, dans ce cas le code attend juste le parsing du fichier JS avant de continuer son exécution.
# Exemples
# Mode global
namespace My;
class MyRenderConfigView extends \Anakeen\Ui\DefaultView
{
public function getJsReferences(\Anakeen\Core\Internal\SmartElement $document = null)
{
$js = parent::getJsReferences();
$jsRef = new JsAssetReference("/MY/JS/global.js");
$jsRef->setType(JsAssetReference::globalType);
$js["global"] = $jsRef;
return $js;
}
}