2011-02-23 17 views
146

मैं बैकबोन.जेएस को आजमा रहा हूं, और एक चीज जो मैं कोशिश कर रहा हूं वह एक दूरस्थ एपीआई को कॉल करना है, इसलिए मुझे Backbone.sync को ओवरराइड करने में सक्षम होना चाहिए, क्योंकि मैं the documentation समझता हूं।Backbone.sync को ओवरराइड कैसे करें?

प्रलेखन में ऐसा करने का कोई उदाहरण नहीं है, और बैकबोन के लिए कोई Google समूह नहीं दिखता है ... क्या कोई ऐसा करने के लिए एक उदाहरण बता सकता है?

+4

एक Google समूह के अभाव में, freenode पर #documentcloud कमरे बाहर की जाँच और वहाँ अपने सवाल पूछने का प्रयास करें। अगर आप उत्तर प्राप्त करते हैं तो बस यहां वापस आना और अपने प्रश्न का उत्तर देना सुनिश्चित करें। वहां बहुत सारी चर्चाएं हैं और इसे कोडोड करना और इसे आपके लिए आने वाले लोगों के लिए खोजने योग्य बनाना अच्छा लगता है। –

+3

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

उत्तर

225

इस एनोटेट स्रोत उदाहरण पर एक नज़र, जहां वे एक LocalStorage विकल्प के साथ Backbone.sync के ऊपर लिख लो

backbone-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 बस डिफ़ॉल्ट वैश्विक एक है कि सभी मॉडलों जब तक वीं का उपयोग करें ई मॉडल में sync विधि विशेष रूप से सेट है।

+2

क्या होगा यदि मैं स्थानीय स्टोरेज से मॉडल प्राप्त करना चाहता हूं, जबकि कोई अन्य सर्वर से प्राप्त करता है? क्या यह अभी तक संभव है? – picardo

+19

'(this.sync || Backbone.sync) 'संपादित देखें। रीढ़ की हड्डी के एनोटेटेड स्रोत को पढ़ने के लिए एक और युक्ति है। यह सब वहाँ है! – Raynos

+0

यह कमाल है। बहुत बहुत धन्यवाद। – picardo

15

मुझे पता है कि यह उत्तर थोड़ा देर हो चुकी है, और @ रेनोस का जवाब बहुत अच्छा है, लेकिन मैंने इसे थोड़ा अलग किया, और शायद यह आपके लिए या किसी अन्य व्यक्ति के लिए एपीआई का उपयोग करने की कोशिश करने के लिए उपयोगी होगा रीड की हड्डी।

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

मैं आम तौर पर रीढ़ की हड्डी के sync विधि ओवरराइड करने के लिए जब मैं केवल सिंक कुछ विशेषताओं की जरूरत की जरूरत है:

यहाँ एक उदाहरण है। एक ठेठ कार्यान्वयन इस तरह दिखता है:

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

और यह मॉडल या संग्रह में जाता है। –

+2

मामूली सुझाव: उस पिछली पंक्ति को 'Backbone.sync.apply (यह, तर्क) में बदलने के बारे में क्या; '? यदि आप, उदाहरण के लिए, 'सिंक' के ओवरराइड संस्करण में "विकल्प" तर्क छोड़ने का निर्णय लेते हैं, तो यह थोड़ा अधिक लचीला है। – Lochlan

+0

इस प्रश्न के भविष्य के खोजकर्ताओं के लिए कुछ और: बैकबोन.sync_ a la वापस करने के लिए सुनिश्चित करें http://backbonejs.org/docs/backbone.html#section-62 – Lochlan

संबंधित मुद्दे