Backbone希望包含created_at,updated_at等,但我不想这样做
我正在使用Backbone和Rails。 我有一个模型,我可以创建和销毁就好了。 但是,当我编辑时,我收到此错误:
Can't mass-assign protected attributes: created_at, id, updated_at
那讲得通。 这些属性受到保护,应受到保护。 Backbone不应该尝试更新这些属性,但Backbone不知道更好。
当然,一个选择是在我的Rails控制器中删除params[:created_at]
等,但是我可以想象得到非常干的非常快,加上它似乎是错误的必须这样做。
有没有办法告诉Backbone不要在表单中包含这些属性?
要么不将它们发送到客户端,以便您的Backbone模型永远不会知道它们,要么覆盖模型中的toJSON
以排除它们。
默认的toJSON
实现非常简单:
toJSON: function() { return _.clone(this.attributes); }
所以你可以用这个替换它:
toJSON: function() { var attrs = _(this.attributes).clone(); delete attrs.created_at; delete attrs.updated_at; return attrs; }
你甚至可以将补丁直接插入到Backbone.Model.prototype
如果这对你有意义的话。
改变toJSON
的缺点是toJSON
倾向于在Backbone中执行双重任务:
-
toJSON
用于序列化服务器的模型和集合。 -
toJSON
用于序列化视图的模型和集合。
如果您仍想在视图中使用updated_at
和created_at
,那么我建议添加另一个方法,比如serialize_for_view
,它执行标准toJSON
所做的事情:
serialize_for_view: function() { return _(this.attributes).clone(); }
然后使用var html = this.template({m: this.model.serialize_for_view()})
来构建视图的HTML。 如果你想在任何地方使用它,你也可以将serial serial_for_view修补到Backbone.Model.prototype
。
我找到了
model.unset("created_at"); model.unset("updated_at"); model.save()
解决了这个问题。 如果您需要这些属性,这将无效,但如果不需要,则可行。
- 适用于服务器和客户端的模板语言
- 如何使用Rails,Devise和Backbone.js进行令牌认证?
- Marionette.js与Rails(设计)认证
- Backbone.js路由器实例在某种程度上是无效的
- Backbone.js和Rails – 如何处理Backbone模型中的参数?
- 未捕获的TypeError:undefined不是函数rails3 / backbone / js
- Backbone.js前端有RESTful Rails后端吗?
- Rails,Backbone,PhoneGap,CORS(Access-Control-Allow-Origin错误不允许)
- 在backbone.js + rails中渲染视图