       # Successfully saved
       @_modified = false
       newDirFs = null
+      @dispatchEvent({type: "save"})
       return  # Last PromiseValue
     ).finally(=>
       # Revert properties if failed

      items: @_items
      bootItem: @_bootItem
      board: @_board
    })

  #--------------------------------------------------------------------------------

    ).catch(=>
      return I18n.rejectPromise("Invalid_sketch")
    ) # return dirFs.readFile().then()...

  ###*
  @static
  @method
    Check if sketch exists
  @param {AsyncFs} dirFs
    File system object at the sketch directory
  @return {Promise}
    Promise object
  @return {boolean} return.PromiseValue
    True if sketch already exists
  ###
  @exists: (dirFs) ->
    return dirFs.readFile(SKETCH_CONFIG, SKETCH_ENCODING).then(=>
      return true
    ).catch(=>
      return false
    )

  ###*
  @method
