From 6d0ecbc912049896af0eab2433a2e361322e1aae Mon Sep 17 00:00:00 2001 From: Nadeem Afana Date: Sun, 19 Nov 2017 09:51:07 -0800 Subject: [PATCH] Exposes select2 instance via .data('select2') --- src/js/select2/core.js | 4 ++++ tests/integration/jquery-calls.js | 39 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/js/select2/core.js b/src/js/select2/core.js index cd6e99b8..3d4ade2e 100644 --- a/src/js/select2/core.js +++ b/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(); diff --git a/tests/integration/jquery-calls.js b/tests/integration/jquery-calls.js index a5402b69..d7c3926f 100644 --- a/tests/integration/jquery-calls.js +++ b/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 = $( + '' + ); + + // 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); }); \ No newline at end of file