2012-07-31 5 views
7

के साथ मैं डेटाबेस में एक परिवर्तित मॉडल को सहेजना चाहता हूं (पहले सेट करें)। अगर सहेज दूसरे पृष्ठ पर रीडायरेक्ट हो गया (उदाहरण के लिए, कोई अन्य कार्रवाई हो सकती है)।बैकबोन.जेएस के साथ कौन से गुणों को निर्दिष्ट किए बिना सहेजने के लिए कैसे करें लेकिन कॉलबैक

Model.save में दो वैकल्पिक गुण हो सकते हैं। सबसे पहले गुणों का हैश है, और दूसरा विकल्प हैं (सफलता और त्रुटि कॉलबैक की तरह)। http://backbonejs.org/#Model-save

somemodel.set({foo: 'bar'}); 
//lots of other logic and misc steps the user has to do 
somemodel.save(); //on success should go here 

के बाद से गुण पहले से ही स्थापित कर रहे हैं, मैं केवल कॉलबैक की जरूरत है।

अतीत मैंने किया था में:

somemodel.save(somemodel.toJSON(), { 
    success: function() { 
     //other stuff 
    } 
); 

या विधि बचाने

somemodel.save(
    { foo: this.$('input').val()}, 
    { success: function(){} 
); 

मैं एक तरह से यह साफ करने के लिए की तलाश में हूँ करने के लिए फिर से मान पास। दस्तावेज़ राज्य, यदि नए गुण हैं तो मॉडल एक परिवर्तन स्थिति को आग लगा देगा। लेकिन मैं वैसे भी उपयोगकर्ता को रीडायरेक्ट करना चाहता हूं (नई सामग्री या पुराने/अनलर्टेड पर सहेजना)।

इस मौजूद नहीं है:

somemodel.on('success', function(){}); 

और इस, केवल सत्यापन के लिए है:

if(somemodel.save()) { //action } 

भी "सिंक" गलत घटना (क्योंकि यह भी नष्ट कर के लिए काम करता है) है

कोई मदद?

उत्तर

12
somemodel.save(
    {}, // or null 
    { 
      success: function(){} 
    } 
); 

आपको मौजूदा कुंजी को संशोधित किए बिना एक विशिष्ट कॉलबैक के साथ एक मॉडल सहेजने देगा।

और एक फिडल http://jsfiddle.net/h5ncaayu/

एक विकल्प के रूप में सफलता कॉलबैक गुजर बचने के लिए आप

  • वादा save द्वारा दिया उपयोग कर सकते हैं:

    somemodel.save().then(...youcallback...) 
    
  • या एक घटना का उपयोग :

    somemodel.on('sync', ...youcallback...); 
    somemodel.save(); 
    
+0

धन्यवाद, यह निश्चित रूप से मैं क्या था की तुलना में बेहतर है। बुरा करने के लिए यह अभी भी थोड़ा गंदे लगता है (केवल पैरामीटर प्रदान करने के लिए पैरामीटर प्रदान करें)। हो सकता है कि मुझे "सफलता" और "त्रुटि" घटना वापस देने के लिए गहराई से ओवरराइट/ओवरराइट/बैकबोन.sync का विस्तार करना चाहिए। अजीब बात यह है कि यह डिफ़ॉल्ट रूप से करता है, क्योंकि रीढ़ की हड्डी घटनाओं के साथ कमजोर युग्मन के बारे में बहुत कुछ है। – Jareish

+1

{} और शून्य इस संदर्भ में समान नहीं हैं।{} का अर्थ है सर्वर पर एक खाली ऑब्जेक्ट भेजने के लिए, जबकि शून्य का मतलब है कि आप किसी भी ऑब्जेक्ट को सेव करने के लिए पास नहीं कर रहे हैं(), और सहेजने() को ऑब्जेक्ट के गुण भेजना चाहिए। – jerzy

+0

@jerzy यह गलत है, कृपया 'model.save' पर बैकबोन दस्तावेज़ देखें: यदि आप' पैच: सत्य 'विकल्प पास नहीं करते हैं तो संसाधन का पूर्ण प्रतिनिधित्व सर्वर को भेजा जाता है http://backbonejs.org/# मॉडल-बचाओ। {} और शून्य के समान व्यवहार होगा – nikoshr

3

बैकबोन.मोडेल में "परिवर्तित एट्रिब्यूट्स" नामक एक बहुत ही सुविधाजनक विधि है जो सहेजे गए गुणों का एक हैश वापस कर देगा जिन्हें आप सहेज सकते हैं। तो ...

model.save(
    model.changedAttributes(), 
    { 
     success : _.bind(function() {...},this), //_.bind() will give scope to current "this" 
     error : _.bind(function() {...},this); 
    } 
); 

अच्छा और साफ ...

+0

भी अच्छा और निश्चित रूप से आसान होगा, लेकिन मैं दूसरे समाधान को बेहतर सोचता हूं (कम कोड)। हालांकि उस बाध्य के साथ अच्छा समाधान! मैंने हमेशा इसे एक और चर में संग्रहीत किया ताकि मैं सफलता/त्रुटि कॉलबैक में पहुंच सकूं, लेकिन यह अधिक मजबूत लगता है। – Jareish

+0

यह उल्लेख करने लायक है कि यह दृष्टिकोण किसी परिवर्तन ईवेंट के बाहर परिवर्तित विशेषताओं की रिपोर्ट नहीं करेगा, इसलिए यह संभव है कि बदले गए एट्रिब्यूट() आपके वास्तविक बदले गए गुणों के बदले झूठे लौट जाएंगे। सिर्फ मन में रखने वाली कुछ बातें। –

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

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