2015-08-04 29 views
6

Burada örnek olarak bir özel veri bağdaştırıcısı oluşturmaya çalışıyorum: http://select2.github.io/announcements-4.0.html#query-to-data-adapter. DataAdapter tanımıyla işlev dışındaki select2 denetimini oluşturan satırı nasıl hareket ettirebilirim (aşağıdaki kodlara bakın)?Select2 4 özel veri bağdaştırıcısı

<!DOCTYPE html> 
<head> 
    <title></title> 
    <link href="select2.css" rel="stylesheet" /> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.js"></script> 
    <script type="text/javascript" src="select2.full.js"></script> 
    <script type="text/javascript"> 
     $.fn.select2.amd.require(
      ['select2/data/array', 'select2/utils'], 
      function (ArrayData, Utils) { 
       function CustomData ($element, options) { 
        CustomData.__super__.constructor.call(this, $element, options); 
       } 

       Utils.Extend(CustomData, ArrayData); 

       CustomData.prototype.query = function (params, callback) { 
        var data = {results: []}; 
        data.results.push({id: params.term, text: params.term}); 
        data.results.push({id: 11, text: 'aa'}); 
        data.results.push({id: 22, text: 'bb'}); 
        callback(data); 
       }; 

// Works if uncommented, but this line needs to be elsewhere (in $(document).ready()). 
       //$("#my").select2({tags: true, dataAdapter: CustomData}); 
      }); 

     $(document).ready(function() { 
// This line does not work here.    
      $("#my").select2({tags: true, dataAdapter: CustomData}); 
     }); 
    </script> 
</head> 
<body> 
    <select id="my"></select> 
</body> 
</html> 

cevap

11

Eğer AMD-Modeli aracılığıyla tanımlıyoruz:

$.fn.select2.amd.define('select2/data/customAdapter',[ 
     'select2/data/array', 
     'select2/utils' 
    ], 
    function (ArrayAdapter, Utils) { 

     function CustomDataAdapter ($element, options) { 
      CustomDataAdapter.__super__.constructor.call(this, $element, options); 
     } 
     Utils.Extend(CustomDataAdapter, ArrayAdapter); 

     CustomDataAdapter.prototype.current = function (callback) { 

      callback(...); 

     }; 

     return CustomDataAdapter; 
    } 
); 

var customAdapter=$.fn.select2.amd.require('select2/data/customAdapter'); 

$("#my").select2({ 
    tags: true, 
    dataAdapter: customAdapter 
}); 
+0

benim için çalışmıyor , ben "tanımsız veya null referans özelliği 'amd' alınamıyor" alıyorum: http: // pastebin .com/yqarRJRu – PowerGamer

+0

kodunuzu sadece birkaç tarayıcıda başarılı bir şekilde çalıştırabilirsiniz - select2'nin son sürümünü (v4.0.0) dahil ediyor musunuz? https://jsfiddle.net/hvzfmthm/ – gunthor

+0

Tüm URL'leri çevrimiçi sunuculara (http://pastebin.com/0F053u3j) değiştirdim, ancak yine de IE11'de aynı hatayı aldım. – PowerGamer