code: function () {
              var el = this.opts.element, observer, self = this;
  
              el.on("change.select2", this.bind(function (e) {
                  if (this.opts.element.data("select2-change-triggered") !== true) {
                      this.initSelection();
                  }
              }));
  
              this._sync = this.bind(function () {
  
                  // sync enabled state
                  var disabled = el.prop("disabled");
                  if (disabled === undefined) disabled = false;
                  this.enable(!disabled);
  
                  var readonly = el.prop("readonly");
                  if (readonly === undefined) readonly = false;
                  this.readonly(readonly);
  
                  syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);
                  this.container.addClass(evaluate(this.opts.containerCssClass, this.opts.element));
  
                  syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);
                  this.dropdown.addClass(evaluate(this.opts.dropdownCssClass, this.opts.element));
  
              });
  
              // IE8-10 (IE9/10 won't fire propertyChange via attachEventListener)
              if (el.length && el[0].attachEvent) {
                  el.each(function() {
                      this.attachEvent("onpropertychange", self._sync);
                  });
              }
  
              // safari, chrome, firefox, IE11
              observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;
              if (observer !== undefined) {
                  if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }
                  this.propertyObserver = new observer(function (mutations) {
                      $.each(mutations, self._sync);
                  });
                  this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });
              }
          }
docs: Monitor the original element for changes and update select2 accordingly
   abstract