code: function (method, options) {
      var self = this,
          should_bind_events = !S(this).data(this.attr_name(true));
  
  
      if (S(this.scope).is('[' + this.attr_name() +']')) {
        S(this.scope).data(this.attr_name(true) + '-init', $.extend({}, this.settings, (options || method), this.data_options(S(this.scope))));
  
        if (should_bind_events) {
          this.events(this.scope);
        }
  
      } else {
        S('[' + this.attr_name() +']', this.scope).each(function () {
          var should_bind_events = !S(this).data(self.attr_name(true) + '-init');
          S(this).data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options(S(this))));
  
          if (should_bind_events) {
            self.events(this);
          }
        });
      }
      // # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating.
      if (typeof method === 'string') {
        return this[method].call(this, options);
      }
  
    }
docs: Event binding and data-options updating.