build(renderControl, data, forceTemplate) {
    // prepare the data
    if (this.preview) {
      if (data.name) {
        data.name = data.name + '-preview'
      } else {
        data.name = utils.nameAttr(data) + '-preview'
      }
    }
    data.id = data.name
    this.data = jQuery.extend({}, data)

    // build the control
    control.controlConfig = this.controlConfig
    const controlInstance = new renderControl(data, this.preview)
    let field = controlInstance.build()
    if (typeof field !== 'object' || !field.field) {
      field = { field: field }
    }

    // If field is a raw HTML string, convert to HTMLElement(s)
    if (typeof field.field === 'string') {
      const tmpField = this.markup('div', field.field, {})
      if (tmpField.childElementCount === 1) {
        field.field = tmpField.children.item(0)
      } else {
        field.field = Array.from(tmpField.children)
      }
    }

    // build the label & help text
    const label = this.label()
    const help = this.help()

    // process the relevant layout template
    let elementTemplate
    if (forceTemplate && this.isTemplate(forceTemplate)) {
      elementTemplate = forceTemplate
    } else {
      elementTemplate = this.isTemplate(field.layout) ? field.layout : 'default'
    }
    const element = this.processTemplate(elementTemplate, field.field, label, help)

    // execute prerender events
    controlInstance.on('prerender')(element)

    // bind control on render events
    element.addEventListener('fieldRendered', controlInstance.on('render'))
    return element
  }
Process the configuration from an element from the standard formData array
building the control, label and help text, and then putting them all together.
Should support the control object returning a DOM element, or an object containing
configuration properties:
  - field - the DOM element
  - noLabel - this control shouldn't have a label (nor a space for a label)
  - hidden - this control shouldn't render anything visible to the page
@param {Class} renderControl - the relevant control class
@param {Object} data - configuration data passed through formData for this control
@param {String} forceTemplate - programmatically force the template with which this control to be rendered
@return {HTMLElement} element