       Unregister event listeners, remove elements and so on
       ###
       destroy: ->
+        self = this
+        return self if self.locked
+        self.element.remove()
+        self.off()
+        self.emit('destroy')
       # }}}
 
       # {{{ Event template methods

        # @type {jQuery Element}
        self.element = element if element
        # @type {Hash}              数据
        self.data = {}
        # Copy class configurations to instance
        utils.configure self, self.constructor.options, options

      ###
      Ensure basic skeleton of widget usually with a loader
      ###
      skeleton: (element) ->
        self = this
        self.element = self._getElement(element or self.element)
        self.element.attr('id', self.uid)
        cssClass = self.constructor.cssClass()
        if not self.element.hasClass(cssClass)
          self.element.addClass(cssClass)
        self.configure()

      ###
      Render widget when data is ready
      ###
      render: ->

      ###
      Disable events

      # }}}

      # {{{ Lifecycle methods
      constructor: (element, options={}, data={}) ->
        self = this
        # @type {String}
        self.constructor.prefix or= text.underscore(self.constructor.name)
