我的数据模型看起来像下面的JSON结构(只是示例):
var post = {
id: 123,
title: 'Sterling Archer',
comments: [
{text: 'Comment text', tags: ['tag1', 'tag2', 'tag3']},
{text: 'Comment test', tags: ['tag2', 'tag5']}
]
};
在Backbone一侧,它表示为嵌套模型,看起来像下面这样:
var PostModel = Backbone.Model.extend({
parse: function (response) {
if (response.comments) {
response.comments = new Backbone.Collection(response.comments);
}
return response;
}
});
var post = new PostModel(post, {parse: true});
我想将rfc6902 (JSONPatch) specification应用于我的结构。但问题是我的结构不是纯JSON,而是嵌套的模型/集合单元。
我需要有关如何修补嵌套的backbonejs结构的最佳实践,例如官方文档examples:
是否有人在BackboneJS应用程序中使用JSON + Patch规范?请与我们分享。
感谢。
编辑:这是简短的例子。假设我需要对我的帖子模型进行一些修改,例如评论添加:
var op = [
{ "op": "add", "path": "/comments/2", "value": {text: 'Comment test3', tags: ['tag4']}" }
]
我怎么能用骨干做到这一点:
post.appyPatch(op);
是否有最佳做法或/和主干扩展?
答案 0 :(得分:4)
我已使用共享代码和Plunker库在json-patch.js中创建了一个可用的应用程序来应用补丁。我已使用应用修补程序的PostModel
方法扩展applyPatch
。以下是applyPatch
方法代码:
var PostModel = Backbone.Model.extend({
...
applyPatch: function(op) {
var postStringify = JSON.stringify(this); // JSON string
var postAttributesJSON = JSON.parse(postStringify); // JSON object. This is same as postAttributes
var postPatched = jsonpatch.apply_patch(postAttributesJSON, op); // Patch applied
var changed = this.changedAttributes(postPatched); // Changed attributes
var self = this;
_.each(_.keys(changed), function(key) {
if(key == 'comments') {
self.get('comments').set(changed[key], {merge: true});
}
});
}
});