我的 Backbone 模型中需要虚拟属性,但 Backbone 似乎不支持这一点,我将如何自己实现这一点。
虚拟属性是指仅在客户端维护的属性,不保存/同步到服务器。我想用它们来存储仅与客户端 View 渲染相关的状态信息,例如是否选择/检查模型。我将在 View 的模板呈现中使用模型属性,但我不希望将这些值发送到服务器,或保存在数据库中。
最佳答案
如果你只想在客户端存储模型的属性,为什么不直接使用:
model.set({attribute: "client-side only"})
代替:
model.fetch()
为避免触发变更事件,可以传入:
model.set({silent:true})
尽管文档不推荐这样做。如果您更喜欢冒险,您也可以重写 set 方法使其真正静音,如本答案中所述:
Truly change a model attribute silently in Backbone.js?
更新:
环顾四周: Backbone.js partial model update 和 Exclude model properties when syncing (Backbone.js)
看起来您拥有的最简单的选择是:
model.save(model.changedAttributes(), {patch: true});
或者如果您需要以一种良好的 restful 方式创建/更新这些对象,您可以像这样覆盖主干sync
:
Backbone.Model.extend({
// Overwrite save function
save: function(attrs, options) {
options || (options = {});
// Filter the data to send to the server
delete attrs.selected;
delete attrs.dontSync;
options.data = JSON.stringify(attrs);
// Proxy the call to the original save function
Backbone.Model.prototype.save.call(this, attrs, options);
}
});
图片来源:Simon Boudrias
关于javascript - Backbone 模型虚拟属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23597262/