我嘗試Backbone.js的,和的事情我想一個是做一個遠程API的調用,所以我需要能夠覆蓋Backbone.sync,據我所知the documentation。如何覆蓋Backbone.sync?
沒有如何做到這一點的文檔本身的例子,似乎沒有成爲谷歌組骨幹...可有人指出,這樣做的一個例子嗎?
我嘗試Backbone.js的,和的事情我想一個是做一個遠程API的調用,所以我需要能夠覆蓋Backbone.sync,據我所知the documentation。如何覆蓋Backbone.sync?
沒有如何做到這一點的文檔本身的例子,似乎沒有成爲谷歌組骨幹...可有人指出,這樣做的一個例子嗎?
看看這個註釋的源代碼示例,其中它們將覆蓋Backbone.sync
有localStorage的替代
基本上Backbone.sync應該是一個函數,有4個參數:
Backbone.sync = function(method, model, options) { };
你需要火取決於method
是否成功或者options.success
或options.error
。該方法的格式爲:
"create"
:預計,你在服務器上創建的模型"read"
:預計你從服務器讀取這個模型,並將其返回"update"
:預計更新與參數"delete"
服務器上的模型:預計你從服務器上刪除的模型。您需要實現這4個方法,並定義任何你想爲你的"server"
當然這些都只是Backbone.sync
必須實現的事情。您可以實施更多methods
,您可能會將更多參數傳遞迴success
,但最好不要這樣做。
這是最好的,以確保它一樣Backbone.sync
目前這樣做,你的編程接口而不是實現。如果你想轉出修改後的Backbone.sync
的說localStorage的一個你不會有自己擴展它來匹配您的擴展Backbone.sync」
[編輯]
也不要注意,你可以使用sync
多個實現Backbone.sync
每個引用actaully (this.sync || Backbone.sync)
那麼你就必須這樣做。
var MyModel = Backbone.Model.extend({
...
"sync": myOwnSpecificSync,
...
});
Backbone.sync
只是默認的全局的所有機型使用,除非日e型號具有專門設置的sync
方法。
我知道這個答案有點太晚了,@Raynos的答案很好,但我做了一點不同,也許它對你或任何其他試圖使用API的人有用骨幹。
而是覆蓋Backbone.sync的,我overrided 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);
};
我通常需要重寫骨幹sync
方法時,我只需要同步的某些屬性。一個典型的實現是這樣的:
sync: function (method, model, options) {
options.data = _.pick(this.attributes, 'foo', 'bar', 'baz');
return Backbone.sync.call(this, method, model, options);
}
在沒有谷歌集團,試圖檢查出freenode上的#documentcloud房間,問你的問題在那裏。如果你得到答案,請務必回到這裏回答你自己的問題。在那裏有很多很棒的討論,並且很好地將它編碼並使其可以被搜索到。 – 2011-02-23 22:06:25
供參考:http://groups.google.com/group/backbonejs – 2011-09-21 08:11:31