Ho implementato un sistema di tagging in cui è possibile scegliere tra tag esistenti o aggiungere nuovi tag. Dopo che un nuovo tag è stato selezionato, continuerà a essere utilizzato con una chiamata AJAX.Seleziona2: opzione di aggiornamento dopo aver selezionato il nuovo tag
Per ottenere ciò, utilizzo la richiamata createTag
e l'evento select2:select
. Perché mi piace creare il tag solo quando è selezionato, faccio una chiamata AJAX per questo se viene attivato l'evento select2:select
.
Il problema è che ho bisogno di aggiornare l'opzione già creata di select2 con l'ID che ottengo dal persistere del mio nuovo tag nel database. Qual è la soluzione più pulita per questo?
Ecco quello che ho:
$('select.tags').select2({
tags: true,
ajax: {
url: '{{ path('tag_auto_complete') }}',
processResults: function (data) {
return {
results: data.items,
pagination: {
more: false
}
};
}
},
createTag: function (tag) {
return {
id: tag.term, // <-- this one should get exchanged after persisting the new tag
text: tag.term,
tag: true
};
}
}).on('select2:select', function (evt) {
if(evt.params.data.tag == false) {
return;
}
$.post('{{ path('tag_crrate_auto_complete') }}', { name: evt.params.data.text }, function(data) {
// ----> Here I need to update the option created in "createTag" with the ID
option_to_update.value = data.id;
}, "json");
});
Hai mai provato ad attivare un evento di modifica una volta creato il tag? – BuddhistBeast
@BuddhistBeast dovrebbe questo aiutarmi esattamente? Se ascolto questo evento il mio ID è già andato? O dovrei ascoltare l'evento change invece dell'evento select? – TiMESPLiNTER
correlati http://stackoverflow.com/questions/23295168/how-do-i-fire-a-new-ajax-on-select2-new-remove-tag-event –