比方說,我有一個Person
模型規範化錯誤的有效載荷在灰燼
App.Person = DS.Model.extend
firstName: DS.attr 'string'
lastName: DS.attr 'string'
email: DS.attr 'string'
我使用ember-data
,呼喚使用下劃線的屬性名的REST API(即firstName
是first_name
),所以我定製ApplicationSerializer
執行「全線」規範化(請參閱docs)。
App.ApplicationSerializer = DS.RESTSerializer.extend
keyForAttribute: (attr) ->
Ember.String.underscore(attr)
這對串行化和規範化數據往返於服務器都很有效。但是,來自服務器的錯誤呢?
比方說,我有一個操作,試圖使用PUT
來更新Person
記錄。所以,我有按鈕
# Somewhere in the person/edit template
<button {{action "save"}}>Save</button>
而且控制器
App.PersonEditController = Ember.ObjectController.extend
actions:
save: ->
@get('model').save().then(@onDidCreate.bind(@)).fail(@onBecameError.bind(@))
onBecameError: (res) ->
@get('model').set 'errors', res.responseJSON.errors
但這種設置的下劃線的屬性名稱錯誤(即{first_name: ["can't be blank"]}
)。爲了顯示錯誤,我必須將我的視圖綁定到下劃線的屬性名稱。然後,我的觀點將會受到firstName
和first_name
屬性的約束。
如何使用相同的串行器來標準化錯誤負載以保持一致性?
編輯
而是重寫ajaxError
鉤,最後我只是用ActiveModelSerializer
和ActiveModelAdapter
在他的回答中提到kingpin2k。這將標準化和序列化從下劃線屬性到camelCased屬性的數據和錯誤。
我甚至不知道有一個'ActiveModelSerializer'。由於我使用Rails作爲後端,我將嘗試使用此適配器。它如何期待從服務器返回錯誤? – Feech
https://github.com/emberjs/data/blob/master/packages/activemodel-adapter/lib/system/active_model_adapter.js – Kingpin2k
我很確定你發送的格式是DS.ActiveModelAdapter – Kingpin2k