我正在使用Ember 2.0在前端创建一个在线表单构建器,后端使用json_api_resources gem创建Rails 4.2.
在发布表单的过程中,用户必须能够将一段代码剪切/粘贴到他/她的网页中,以便以“ajax”形式配置.
因此,Form模型的“embed-snippet”属性应该是只读的.当用户更改表单并重新保存记录时,我不希望将代码段的内容发送回服务器.
我考虑过的一些方法:
>修改序列化程序以检查此特定属性,并将其从有效载荷中删除,然后再将其发送到后端
>将’embed-snippet’字段转换为与Form模型关系的单独模型,然后将其从存储中排除
>创建一个新的Ember Data属性类型
理想情况下,会有一个更好的方法来处理这个问题.
就像是:
'DS.attr('string',{ readOnly: true })
所以我的问题是,什么是确保这个字段的内容不被发送回服务器的最佳方式?
解决方法
要获得{readOnly:true}功能(这使得添加新模型/ attrs更容易),您可以在JSONAPISerializer上自定义serializeAttribute方法:
(在serializers / application.js中):
import DS from 'ember-data'; export default DS.JSONAPISerializer.extend({ serializeAttribute(snapshot,json,key,attribute) { // do not serialize the attribute! if (attribute.options && attribute.options.readOnly) { return; } this._super(...arguments); },});