_updateEditability () {
    this.editable = {
      field: true,
      value: true
    }

    if (this.editor) {
      this.editable.field = this.editor.options.mode === 'tree'
      this.editable.value = this.editor.options.mode !== 'view'

      if ((this.editor.options.mode === 'tree' || this.editor.options.mode === 'form') &&
          (typeof this.editor.options.onEditable === 'function')) {
        const getValue = this.getValue.bind(this)
        const editable = this.editor.options.onEditable({
          field: this.field,
          get value () {
            return getValue()
          },
          path: this.getPath()
        })

        if (typeof editable === 'boolean') {
          this.editable.field = editable
          this.editable.value = editable
        } else if (typeof editable === 'object' && editable !== null) {
          if (typeof editable.field === 'boolean') this.editable.field = editable.field
          if (typeof editable.value === 'boolean') this.editable.value = editable.value
        } else {
          console.error(
            'Invalid return value for function onEditable.',
            'Actual value:', editable, '.',
            'Either a boolean or object { field: boolean, value: boolean } expected.')

          this.editable.field = false
          this.editable.value = false
        }
      }
    }
  }
Determine whether the field and/or value of this node are editable
@private