2015-08-04 21 views
6

Tôi đang cố tạo bộ điều hợp dữ liệu tùy chỉnh theo ví dụ tại đây: http://select2.github.io/announcements-4.0.html#query-to-data-adapter. Làm thế nào tôi có thể di chuyển dòng tạo điều khiển select2 bên ngoài hàm với định nghĩa của DataAdapter (xem mã bên dưới)?Chọn2 4 bộ điều hợp dữ liệu tùy chỉnh

<!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> 

Trả lời

11

bạn định nghĩa nó qua AMD-Pattern:

$.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

Không làm việc cho tôi, tôi nhận được "Không thể để có được tài sản 'amd' tham chiếu undefined hoặc null": http: // pastebin .com/yqarRJRu – PowerGamer

+0

vừa thử mã của bạn thành công trong một số trình duyệt trong fiddle - bạn có bao gồm phiên bản mới nhất của select2 (v4.0.0) không? https://jsfiddle.net/hvzfmthm/ – gunthor

+0

Tôi đã thay đổi tất cả các url thành máy chủ trực tuyến (http://pastebin.com/0F053u3j), nhưng vẫn gặp lỗi tương tự trong IE11. – PowerGamer

Các vấn đề liên quan