Hiyo
我很贪图 - 正在构建Ember前端,Rails使用Devise进行身份验证。试图在客户端上显示服务器端错误...
我已经阅读了很多有关此事的内容,但似乎没有任何效果。
登录页面位于/ sessions / new
会话新模板(Emblem.js)
Ember.TextField valueBinding="email" placeholder="Email" type="text"
= errors.email
会话新路线
SiloStore.SessionsNewRoute = Ember.Route.extend
model: -> @store.createRecord('session')
setupController: (controller, model) ->
controller.set('content', model)
会话新控制器
SiloStore.SessionsNewController = Ember.ObjectController.extend
needs: ['admin']
actions:{
logIn: ->
self = @
content = @content
@content.save().then(->
self.get('controllers.admin').set('content', content);
self.transitionToRoute 'admin.dashboard'
)
}
会话控制器(Rails)
render json: {
errors: {
email: ["invalid email or password"]
}
}, status: :unprocessable_entity
控制台中Rails服务器的JSON错误
{"errors":{"email":["invalidemailorpassword"]}}
现在我的模板中的Ember.TextField显示错误而不是我的错误 - 我收到一个大丑红色错误,如下所示:
POST http://dev.siloarts.net:3000/api/v1/sessions 422 (Unprocessable Entity)
Error: The backend rejected the commit because it was invalid: {email: invalid email or password}
任何想法?我确定这是一件蠢事......
哦,哦,哦,这是我的调试信息:
DEBUG: -------------------------------
DEBUG: Ember : 1.4.0-beta.1+canary.011b67b8
DEBUG: Ember Data : 1.0.0-beta.5+canary.d9ce2a53
DEBUG: Handlebars : 1.1.2
DEBUG: jQuery : 1.10.2
DEBUG: -------------------------------
谢谢你提前爱上了
答案 0 :(得分:1)
此错误还会阻止错误结构绑定。您可以通过以下方式修复/修补:始终在需要保存时调用person.save().catch(->)
。这将捕获错误并注意到,但仍然可以在模型上使用becameError:
和becameInvalid
,或者只是自己实现该功能。您还可以按如下方式更改模型类:
App.Model = DS.Model.extend
save: (catchErr=true) ->
if catchErr
fail = ->
console.log('Save failed')
retutn @_super().catch(fail)
@_super()
比更改Person对象的基本callas
App.Person = App.Model.extend
...
然后当你需要使用真正的捕获时person.save(false).catch(fn)
答案 1 :(得分:0)
升级后我遇到了同样的错误。降级到Ember 1.2.0应解决您的问题:)