mi raccomando la lettura the release notes e la 4.0 release announcement durante la migrazione da Select2 3.5.2 a 4.0.0 Select2.
Con la versione 3.5.2, posso riprodurre la partita sottolineatura per la ricerca di dati (utilizzando formatSelection e query.term) .. qualche idea di come farlo con v4.0.0 (funzione templateResult passare solo 'risultato' e non 'query' più?
questo è stato rimosso nella versione 4.0, perché i risultati sono stati separati dalle query, quindi non aveva senso per mantenere passando lungo le informazioni. Naturalmente, questo non significa che non puoi ottenere la query e memorizzarla.Tutto quello che dovresti fare è archiviare la query, qualcosa come la seguente potrebbe funzionare
var query = {};
var $element = $('#my-happy-select');
function markMatch (text, term) {
// Find where the match is
var match = text.toUpperCase().indexOf(term.toUpperCase());
var $result = $('<span></span>');
// If there is no match, move on
if (match < 0) {
return $result.text(text);
}
// Put in whatever text is before the match
$result.text(text.substring(0, match));
// Mark the match
var $match = $('<span class="select2-rendered__match"></span>');
$match.text(text.substring(match, match + term.length));
// Append the matching text
$result.append($match);
// Put in whatever is after the match
$result.append(text.substring(match + term.length));
return $result;
}
$element.select2({
templateResult: function (item) {
// No need to template the searching text
if (item.loading) {
return item.text;
}
var term = query.term || '';
var $result = markMatch(item.text, term);
return $result;
},
language: {
searching: function (params) {
// Intercept the query as it is happening
query = params;
// Change this to be appropriate for your application
return 'Searching…';
}
}
});
Con la versione 3.x, è possibile aggiungere voci gratuite utilizzando il valore di ricerca non presente nell'elenco (utilizzando createSearchChoice). V4.0 non ha questa opzione, nessuna idea su come rifarlo?
Questo può ancora essere fatto in 4.0 utilizzando l'opzione tags
(impostarlo a true
). Se si desidera personalizzare il tag, è possibile utilizzare createTag
(simile a createSearchChoice
).
var $element = $('#my-happy-select');
$element.select2({
createTag: function (query) {
return {
id: query.term,
text: query.term,
tag: true
}
},
tags: true
});
fonte
2015-03-12 19:06:11
Grazie Kevin, apprezza il tuo impegno (e il tempo) necessario per rispondere alle domande e alla codifica allo stesso tempo. Tuttavia, per la domanda n. 2, non voglio aggiungere un "tag" gratuito, ma una voce libera come elenco a discesa. qualsiasi aiuto ? Grazie. – Frederic
Qual è la differenza tra un tag libero e un ingresso gratuito? 'createTag' è uguale al vecchio' createSearchChoice'. –
Grazie Kevin. La soluzione sottolineata è esattamente ciò di cui avevo bisogno. – DerVO