我正在使用带有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>
当我第一次单击无效数据的更新按钮时,错误显示正确,但如果我没有修复错误并再次按更新按钮,则Ember显示:“未捕获错误:在状态rootState中尝试处理事件willCommit
” .loaded.updated.invalid。调用未定义“如何解决它谢谢!
答案 0 :(得分:0)
在处理错误时,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()
将标志返回到初始状态并继续转换。