我正在使用 Backbone 和 Rails。我有一个可以很好地创建和销毁的模型。但是,当我编辑时,我收到此错误:
Can't mass-assign protected attributes: created_at, id, updated_at
这是有道理的。这些属性受到保护,也应该受到保护。 Backbone 不应该尝试更新这些属性,但 Backbone 并不了解更多。
当然,一个选择是删除 Rails Controller 中的 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
用于序列化 View 的模型和集合。
如果您仍然想在 View 中使用 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()})
之类的东西来构建 View 的 HTML。如果您想在任何地方使用它,您也可以将 serialize_for_view
猴子补丁到 Backbone.Model.prototype
中。
关于ruby-on-rails - Backbone想要包含created_at、updated_at等,但我不希望它包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352201/