Hello à tous,
J’aurais besoin d’un petit coup de main sur la partie pure js du core.
Je souhaiterai faire un truc tout bête sur le papier mais pas simple à dev
Pour résumer : l’utilisateur de mon plugin dispose d’un paramètre de config pour saisir l’objet par défaut de ses futurs équipements. Il le saisi via un select de mon fichier configuration.php
Jusque là tout va bien
Je modifie ensuite mon fichier parcelTracking.php avec le code suivant :
<select id="sel_object" class="eqLogicAttr form-control" data-l1key="object_id">
<option value="">{{Aucun}}</option>
<?php
$options = '';
foreach ((jeeObject::buildTree(null, false)) as $object) {
if ( config::byKey('defaultObject', 'parcelTracking') == $object->getId() ) { $options .= '<option value="' . $object->getId() . '" selected="selected">' . str_repeat(' ', $object->getConfiguration('parentNumber')) . $object->getName() . '</option>'; }
else { $options .= '<option value="' . $object->getId() . '">' . str_repeat(' ', $object->getConfiguration('parentNumber')) . $object->getName() . '</option>'; }
}
echo $options;
?>
</select>
Cela me permet de récupérer la valeur de mon config::byKey('defaultObject', 'parcelTracking')
en php.
Mais le passage en DB rechange la valeur par défaut et revient sur aucun.
Du coup je me suis dit que j’allais intercepter un event ‹ change › de l’Id l’équipement nouvellement créé via une fonction de mon fichier parcelTracking.js :
document.querySelector('.eqLogicAttr[data-l1key="id"]').addEventListener('change', function() { }
Et dans cette fonction, j’ai tout d’abord tenté :
const selectObject = document.getElementById('sel_object');
const selectedIndex = selectElement.selectedIndex;
selectElement.selectedIndex = 1; //on repasse à 1 puis ensuite à la valeur voulue pour actualisation
selectElement.selectedIndex = selectedIndex;
Sans succès car le passage en DB se fait après cette fonction. Par contre si je fais :
const selectObject = document.getElementById('sel_object');
const options = Array.from(selectObject.querySelectorAll('option'));
selectObject.options.length = 0;
options.forEach(function(option) {
selectObject.appendChild(option); }
Là la fonction est effectuée après le passage en DB chez moi même si je trouve ca très crade Mais pas chez tous les beta testeurs du plugin. Dépend de la puissance de la machine Jeedom amha.
Ma question : existe-t-il un event que je peux intercepter à la fin du chargement complet de la page de l’équipement ? J’ai essayé sans plus de succès avec
document.addEventListener('DOMContentLoaded', function() { }
Ou une autre méthode que je ne connais pas et beaucoup plus propre que la mienne ?
J’ai tenté aussi le passage en php via public function preInsert() {}
mais la aussi le passage en DB se fait après.
J’espère avoir été clair !
Merci d’avance