Dans l'utilisation normale, l'élément est ajouté avec la balise a affichée par la méthode de formulaire link_to_add
.
Le modèle que j'ai implémenté cette fois est d'ajouter un élément de nested_form aux coordonnées où le canevas est cliqué, et de pré-remplir les coordonnées de cet élément.
Au cours de mes recherches, la méthode link_to_add s'exécute sur des événements qui dépendent de la structure DOM, y compris le plan, donc je ne pouvais pas l'implémenter proprement en utilisant la méthode javascript que link_to_add
utilise en interne.
Par conséquent, la politique d'implémentation de base consiste à écrire les coordonnées dans le magasin global avec le gestionnaire d'événements click de canvas, et à lire les coordonnées du magasin global avec l'événement nested: fieldAdded
, qui est une implémentation de relais externe.
function handleClick(e) {
[...]
var linkToAdd = $('[data-blueprint-id="connectors_fields_blueprint"]')
linkToAdd.data('tmp-x', Math.floor(mouseX));
linkToAdd.data('tmp-y', Math.floor(mouseY));
linkToAdd.click();
}
$(document).on('nested:fieldAdded:connectors', function(event){
var linkToAdd = $('[data-blueprint-id="connectors_fields_blueprint"]')
event.field.find('input[data-x]').val(linkToAdd.data('tmp-x')) && linkToAdd.data('tmp-x', null);
event.field.find('input[data-y]').val(linkToAdd.data('tmp-y')) && linkToAdd.data('tmp-y', null);
[...]
S'il vous plaît laissez-moi savoir si vous connaissez une meilleure façon.
fin