2011-02-23 13 views
146

Backbone.js'yi deniyorum ve denediğim şeylerden biri, uzak bir API'ye çağrı yapmaktır. Bu yüzden, the documentation'u anladığım kadarıyla Backbone.sync'i geçersiz kılmaya ihtiyacım var.Backbone.sync nasıl geçersiz kılınır?

Dokümantasyonun kendisinde bunun nasıl yapılacağına dair bir örnek yok ve Backbone için bir google grubu var gibi görünmüyor ... birisi bunu yapmak için bir örnek gösterebilir mi?

+4

Google Grubu'ndaki yokluğunda, freenode #documentcloud oda kontrol ve orada yöneltebilirsiniz. Sadece bir cevap bulursanız buraya geri gelip kendi sorunuza cevap verdiğinizden emin olun. Orada çok fazla büyük tartışma var ve bunu kodlamak ve sizden sonra gelenler için aranabilir hale getirmek güzel. –

+3

FYI: http://groups.google.com/group/backbonejs –

cevap

225

bir localStorage alternatif Backbone.sync üzerine bu açıklamalı kaynak örnek bir göz atın

backbone-localStorage

Temelde Backbone.sync 4 argüman alan bir işlevi olmalıdır:

Backbone.sync = function(method, model, options) { }; 

You method'un başarılı olup olmadığına bağlı olarak options.success veya options.error'u tetiklemeniz gerekir. yöntemler biçimdedir:

  • "create": Eğer
  • "read" sunucuda model oluşturmak beklenmektedir: sunucudan bu modeli okumak ve ona
  • "update" dönmek beklenmektedir: beklenen güncellemeniz şiddetle
  • "delete" argümanı ile sunucudaki model: modeli sunucudan silmeniz beklenir.

Siz bu 4 yöntemlerini uygulamak ve bu sadece Backbone.sync uygulamaları gerektiğini şeylerdir Elbette senin "server"

için istediğini tanımlamak gerekir. Daha fazla methods uygulayabilir ve daha fazla paramateri tekrar success'a geçirebilirsiniz, ancak bunu yapmamak en iyisidir.

Backbone.sync ile aynı şeyi yaptığından emin olmanız en iyisidir, böylelikle programlamanız bir uygulamadan ziyade bir arabirime dönüşür. Dışarı geçiş yapmak istiyorsanız sizin

[Düzenle] Ayrıca

yapabilirsiniz unutmayın do sen olmaz localStorage kimse genişletilmiş Backbone.sync" eşleşecek şekilde kendiniz uzatmak demek için Backbone.sync modifiye sync birden çok uygulamaları kullanmak Backbone.sync yapılan her başvuru actaully (this.sync || Backbone.sync) yani sadece böyle bir şey yapmak zorunda.

var MyModel = Backbone.Model.extend({ 
    ... 

    "sync": myOwnSpecificSync, 

    ... 
}); 

Backbone.sync tüm modeller th sürece kullanmak sadece varsayılan küresel biridir e modelleri, özel olarak ayarlanmış bir sync yöntemine sahiptir.

+2

LocalStorage'dan getirilecek bir model ister, diğeri sunucudan getirilirse ne olur? Bu mümkün mü? – picardo

+19

'(this.sync || Backbone.sync)' Düzenleme konusuna bakın. Başka bir ipucu, açıklanmış omurga kaynağını okumaktır. Her şey orada! – Raynos

+0

Bu harika. Çok teşekkür ederim. – picardo

15

Bu cevabın biraz geç olduğunu biliyorum ve @Raynos'un cevabı harika, ama bunu biraz daha farklı yaptım ve belki de sizin için veya API ile birlikte kullanmaya çalışan başka bir kişi için yararlı olabilir Omurga. Backbone.sync'yi geçersiz kılmak yerine, ajax isteğinin yapıldığı yer olduğu için Backbone.ajax'u geçersiz kıldım.

// 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); 
}; 
11

Genellikle sadece senkronize bazı özellikler gerektiğinde Omurganın sync yöntemini geçersiz gerekir:

Burada bir örnek verilmiştir. Tipik bir uygulama şu şekildedir:

sync: function (method, model, options) { 
    options.data = _.pick(this.attributes, 'foo', 'bar', 'baz'); 
    return Backbone.sync.call(this, method, model, options); 
} 
+0

ve bu Modele veya Koleksiyon'a gider. –

+2

Küçük öneri: Bu son satırı 'Backbone.sync.apply (bu, argümanlar) olarak değiştirmeye ne dersiniz? Örneğin, "sync" in geçersiz kılınan versiyonunda "seçenekler" argümanını dışarıda bırakmaya karar vermeniz biraz daha esnektir. – Lochlan

+0

Bu sorunun gelecekteki bulucuları için başka bir şey: _ Geri emin olun Backbone.sync_ a la http://backbonejs.org/docs/backbone.html#section-62 – Lochlan