     # Unlink ourselves from the stores/actions we were listening to
     # so that we can be garbage collected
     unlisten() for unlisten in @unlisteners
+  
+  _setDraft: (draft) ->
+    if !draft.body?
+      throw new Error("DraftStoreProxy._setDraft - new draft has no body!")
+    @_draft = draft
+    @_emitter.emit('trigger')
 
   _onDraftChanged: (change) ->
     return if not change?

    # Is this change an update to our draft?
    myDraft = _.find(change.objects, (obj) => obj.id == @_draft.id)
    if myDraft
      @_draft = myDraft
      @_emitter.emit('trigger')

  _onDraftSwapped: (change) ->
    # A draft was saved with a new ID. Since we use the draft ID to
    # watch for changes to our draft, we need to pull again using our
    # localId.
    if change.oldModel.id is @_draft.id
      @_draft = change.newModel
      @_emitter.emit('trigger')

    @_draftPromise ?= new Promise (resolve, reject) =>
      DatabaseStore = require './database-store'
      DatabaseStore.findByLocalId(Message, @draftLocalId).then (draft) =>
        @_setDraft(draft)
        resolve(@)
      .catch(reject)
    @_draftPromise
