code: function Controls(options) {
          this.options = options;
  
          /**
           * ### Controls.listRoot
           *
           * The list which holds the controls
           */
          this.listRoot = null;
  
          /**
           * ### Controls.submit
           *
           * The submit button
           */
          this.submit = null;
  
          /**
           * ### Controls.changeEvent
           *
           * The event to be fired when the list changes
           */
          this.changeEvent = 'Controls_change';
  
          /**
           * ### Controls.hasChanged
           *
           * Flag to indicate whether the list has changed
           */
          this.hasChanged = false;
      }
docs: ## Controls constructor
  
  `Control` wraps a collection of user-input controls
  
  @param {object} options Optional. Configuration options
  which is stored and forwarded to Controls.init.
  
  The  options object can have the following attributes:
  - Any option that can be passed to `W.List` constructor.
  - `change`: Event to fire when contents change.
  - `features`: Collection of collection attributes for individual
  controls.
  - `submit`: Description of the submit button.
  If submit.id is defined, the button will get that id and
  the text on the button will be the text in submit.name.
  If submit is a string, it will be the text on the button.
  - `attributes`: Attributes of the submit button.
  
  @see Controls.init