pic*_*rdo 145 javascript backbone.js
我正在尝试Backbone.js,我正在尝试的其中一件事是调用远程API,所以我需要能够覆盖Backbone.sync,因为我理解文档.
在文档本身没有一个如何做到这一点的例子,并且似乎没有一个用于Backbone的谷歌组...有人可以指出这样做的一个例子吗?
Ray*_*nos 225
看看这个带注释的源示例,它们Backbone.sync用localstorage替代它们
基本上Backbone.sync应该是一个带有4个参数的函数:
Backbone.sync = function(method, model, options) { };
Run Code Online (Sandbox Code Playgroud)
你需要解雇options.success或options.error取决于是否method成功.方法的格式如下:
"create" :期望您在服务器上创建模型"read" :期望您从服务器读取此模型并将其返回"update" :期望您使用参数更新服务器上的模型"delete" :期望您从服务器中删除模型.您需要实现这4种方法并定义您想要的任何方法 "server"
当然,这些只是Backbone.sync 必须实施的事情.你可以实施更多methods,你可以将更多的参数传递回去,success但最好不要这样做.
最好确保它与Backbone.sync当前相同,以便您对接口进行编程,而不是实现.如果你想将你的修改版本改为Backbone.synclocalStorage,你不必自己扩展它以匹配扩展的Backbone.sync"
[编辑]
另请注意,您可以使用多个实现sync.每次引用Backbone.sync都是行动的,(this.sync || Backbone.sync)所以你只需要做一些事情:
var MyModel = Backbone.Model.extend({
...
"sync": myOwnSpecificSync,
...
});
Run Code Online (Sandbox Code Playgroud)
Backbone.sync除非模型具有sync专门设置的方法,否则它只是所有模型使用的默认全局模型.
Cyr*_* N. 15
我知道这个答案有点太晚了,@ Raynos的答案很棒,但我做的有点不同,也许对你或任何其他试图使用Backbone API的人都有用.
我没有覆盖Backbone.sync,而是覆盖了Backbone.ajax,因为它是发出ajax请求的地方.
这是一个例子:
// Set the default implementation of `Backbone.ajax` to proxy through to `$`.
Backbone.ajax = function() {
var args = Array.prototype.slice.call(arguments, 0);
// Here, I add the OAuth token (or any other token)
// But before, I check that data exists, if not I add it
if (args[0]['data'] === undefined) {
args[0]['data'] = {};
}
args[0]['data']['token'] = 'any_api_token_here';
return Backbone.$.ajax.apply(Backbone.$, args);
};
Run Code Online (Sandbox Code Playgroud)
Jes*_*son 11
sync当我只需要同步某些属性时,我通常需要覆盖骨干的方法.典型的实现如下所示:
sync: function (method, model, options) {
options.data = _.pick(this.attributes, 'foo', 'bar', 'baz');
return Backbone.sync.call(this, method, model, options);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59755 次 |
| 最近记录: |