Browse Source

Exposes select2 instance via .data('select2')

Nadeem Afana 7 years ago
parent
commit
6d0ecbc912
2 changed files with 43 additions and 0 deletions
  1. 4 0
      src/js/select2/core.js
  2. 39 0
      tests/integration/jquery-calls.js

+ 4 - 0
src/js/select2/core.js

@@ -84,6 +84,9 @@ define([
     this._syncAttributes();
 
     Utils.StoreData($element[0], 'select2', this);
+
+    // Ensure backwards compatibility with $element.data('select2').
+    $element.data('select2', this);
   };
 
   Utils.Extend(Select2, Utils.Observable);
@@ -579,6 +582,7 @@ define([
     this.$element.removeClass('select2-hidden-accessible');
     this.$element.attr('aria-hidden', 'false');
     Utils.RemoveData(this.$element[0]);
+    this.$element.removeData('select2');
 
     this.dataAdapter.destroy();
     this.selection.destroy();

+ 39 - 0
tests/integration/jquery-calls.js

@@ -1,5 +1,7 @@
 module('select2(val)');
 
+var Utils = require('select2/utils');
+
 test('multiple elements with arguments works', function (assert) {
   var $ = require('jquery');
   require('jquery.select2');
@@ -56,4 +58,41 @@ test('initializes when jQuery $.data contains' +
     '3',
     'The option value should be pulled correctly'
   );
+});
+
+test('$element.data returns instance and options correctly', 
+  function (assert) {
+  var $ = require('jquery');
+  require('jquery.select2');
+
+  var $select = $(
+  '<select>' +
+    '<option value="1">One</option>' +
+    '<option value="2">Two</option>' +
+    '<option value="3" selected>Three</option>' +
+  '</select>'
+  );
+  
+  // Initialize.
+  $select.select2({maximumSelectionLength: 2, multiple: true});
+  
+  assert.equal(
+    $select.val(),
+    '3',
+    'Only 1 option should be pulled.'
+  );
+
+  // Try to resolve instance via .data('select2').
+  var $instance = $select.data('select2'); 
+  assert.ok($instance);
+  assert.ok($instance.options);
+
+  // Ensure $select.data('select2') is the same instance 
+  // created by .select2()   
+  assert.equal($instance, Utils.GetData($instance.$element[0], 
+               'select2'));
+   
+  // Ensure initialized property matches.
+  assert.equal($instance.options.options.maximumSelectionLength,
+               2);
 });