gga*_*ber 34 javascript backbone.js
保存更改时,是否可以仅发送模型的已修改属性?
顺便说一句,是否有任何"官方"Backbone.js小组/邮件列表可以提出这类问题?
Jul*_*ien 46
Backbone不支持开箱即用,但您拥有实现这一目标的所有工具.如果您查看Backbone.sync,您将看到它在您的模型上调用了JSON以获取要发送的实际数据.现在你可能需要调整一下,但这里有它的要点:
initialize: function(){
this.dirtyAttributes = {}
},
set: function(attrs, options){
Backbone.Model.prototype.set.call(this, attrs, options);
_.extend(this.dirtyAttributes, attrs);
},
toJSON : function(){
json = this.dirtyAttributes;
this.dirtyAttributes = {};
return json;
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个完整的解决方案,你需要应用相同的逻辑来取消设置,清除,保存等.但我想你会得到如何做到这一点.我把脏属性的重置放在toJSON函数中,但它应该在成功回调中(当调用save时).
And*_*are 33
目前,骨干网不支持将部分模型发送到服务器.这将是一个有趣的补充.
如果您浏览源代码,您可以看到Backbone.sync(负责与数据存储通信的主干部分)是骨干网中最简单的组件之一,只需在jQuery或Zepto中包含ajax支持.
UPDATE
启动主干版本0.9.10,本机支持部分模型更新
model.save(attrs, {patch: true})
Run Code Online (Sandbox Code Playgroud)
更新:启动主干版本0.9.10,本地支持部分更新
model.save(attrs, {patch: true})
Run Code Online (Sandbox Code Playgroud)
直到0.9.9
一种方法没有直接编辑backbone.js库文件.只需在应用程序js文件中添加以下代码,并在backbone.js加载后加载它.
//override the Backbone.sync to send only the changed fields for update (PUT) request
var Original_BackboneSync = Backbone.sync;
Backbone.sync = function(method, model, options) {
/* just handle the data picking logic for update method */
if (!options.data && model && method == 'update') {
options.contentType = 'application/json';
options.data = JSON.stringify(model.changedAttributes() || {});
}
//invoke the original backbone sync method
return Original_BackboneSync.apply(this, arguments);
};
//Tested in Backbone.js 0.9.1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20983 次 |
| 最近记录: |