2017-09-19 2 views
0

Par exemple, j'ai une classe:Comment puis-je passer une variable pour formatResult et formatSelection (select2)?

classA.js

$(document).ready(function() { 
    select2_scroll('element_name_id') 
}); 

appeler une fonction de

classB.js

function select2_scroll(elementId, queryString) { 
resource_url: 'something/'; 
    $('#' + elementId).select2({ 
    allowClear: true, 
    ajax: { 
     url: resource_url, 
     dataType: 'json', 
     type: 'GET', 
     quietMillis: 100, 
     data: function (term, page) { 
     return { 
      search_term: term, 
      page: page 
     }; 
     }, 
     results: function (data, page) { 
     var more = (page * PAGE_LIMIT) < data.total_results; 
     return { results: data.resource, more: more }; 
     } 
    }, 
    formatResult: resourceName, 
    formatSelection: resourceName, 
    }); 
} 

function resourceName(resource) { 
    var format = '<div>' + resource.name + '</div>' + 
      '<input type="hidden" name="' + elementId + '_id" value="' + resource.id + '"/>'; 

    return format; 
} 

Comment puis-je éviter en utilisant une variable globale pour passer la variable elementId ? Je ne peux pas appeler resourceName directement et passer l'élément elementId en appelant resourceName (resource, elementId).

Est-ce que quelque chose me manque dans le composant Select2?

Répondre

0

J'ai trouvé une solution à mon problème. Je peux juste faire

... 
formatResult: function(resource) { 
     return resourceName(resource, elementId) 
    }, 
formatSelection: function(resource) { 
     return resourceName(resource, elementId) 
    }, 
.... 

Merci!

0

Vous pouvez essayer quelque chose comme:

formatResult:()=>{ 
        resourceName(resource, elementId); 
       }, 
formatSelection:()=>{ 
        resourceName(resource, elementId); 
       }, 
0

Ajoutez votre élément Id dans vos "résultats" retour

results: function (data, page) { 
    var more = (page * PAGE_LIMIT) < data.total_results; 
    return { results: data.resource, more: more, elementId: elementId }; 
    } 

et l'utiliser dans votre fonction:

var format = '<div>' + resource.name + '</div>' + 
     '<input type="hidden" name="' + resource.elementId + '_id" value="' + resource.id + '"/>'; 

Permettez-moi sais, si cela fonctionne pour vous. Je ne l'ai pas testé avec votre exemple