簡體   English   中英

ember-data句柄服務器錯誤

[英]ember-data handle server error

我正在使用帶有rails的ember-data 0.13。 我有一個basicinfo控制器來處理basicinfo模型更新。 更新動作是:

  update: ->
    @content.save()
    @content.on('becameInvalid', (response) ->
      alert Em.inspect(response.errors)
    )

basicinfo.hbs:

<aside class='basicinfo-aside'>
  {{#if inEditModel}}
<div class='control-group'>
  <label for='basicinfo_about_me'>{{t '.basicinfo.edit.about_me'}}</label>

  <div class='controls'>
    {{view Em.TextArea id='basicinfo_about_me'
                       class='basicinfo-about-me'
                       name='basicinfo[about_me]'
                       valueBinding='aboutMe'}}
  </div>
</div>

<div class='action-group'>
  <span {{bindAttr class=':about-me-length-remain
                          hasAboutMeLengthRemain:muted:text-error'}}>
    {{aboutMeLengthRemain}}
  </span>

  <button class='btn-cancel btn' {{action cancel}}>
    {{t '.basicinfo.edit.cancel'}}
  </button>

  <button class='btn-update btn btn-primary' {{action update}}>
    {{t '.basicinfo.edit.update'}}
  </button>
</div>

  {{/if}}
</aside>

<div class='basicinfo-inner'>
  {{#unless inEditModel}}
    <h5>
      {{t '.basicinfo.about_me'}}

      {{#if canManage}}
        <a class='lnk-edit' href='#' {{action edit}}>
          <i class='icon-edit'></i>
        </a>
      {{/if}}
    </h5>

    <p class='about-me'>{{aboutMe}}</p>
  {{/unless}}
</div>

當我點擊無效的數據第一次更新按鈕錯誤顯示正確,但如果我不修復錯誤,按更新按鈕再次灰燼表示:“未捕獲的錯誤:試圖處理事件willCommit上,而在狀態rootState.loaded.updated.invalid。調用未定義的“如何解決它謝謝!

處理錯誤時,Ember數據似乎有點兒麻煩。

我建議你做以下事情:

update: ->
  @content.rollback() if @content.get('isError')
  @content.save().then ((success_responce)->
    <handle success responce here>
  ), (failure)->
    <handle failure here>

在我看來,更好的解決方案是根據record.isError標志禁用更新按鈕。

另一件需要考慮的事情是當服務器返回錯誤並且您想要轉換到另一條路線時(如使用取消按鈕)該怎么辦。 Ember數據將禁止你,抱怨記錄有inFlightAtrributes。 在這種情況下,您可以再次調用record.rollback()將標志返回到初始狀態並繼續轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM