2011-10-20 19 views
11

बचत से एक अच्छी प्रतिक्रिया प्राप्त करने के लिए। एक पुट सर्वर को भेजता है और प्रतिक्रिया वापस आती है। पहली बार जब मैं इसे करता हूं, यह सफलता देता है, अगली बार एक त्रुटि वापस आती है, क्योंकि पहली बार प्रतिक्रिया मॉडल में जोड़ दी जाती है।कैसे backbone.js मैं एक मॉडल की बचत कर रहा हूँ के साथ एक मॉडल

Backbone.js में

सहेजें समारोह:

saveCountry: function() { 
    this.model.save({},{ 
     success: function(model, response) { 
      console.log('success! ' + response); 
     }, 
     error: function(model, response) { 
      console.log('error! ' + response); 
     } 
    }); 
    this.render(); 

    return false; 
}, 

पीएचपी एक JSON स्ट्रिंग रिटर्न:

{"response": "Model saved!"} 

डाल की प्रतिक्रिया के रूप में कोई त्रुटि मिलती है के बाद, क्योंकि 'प्रतिक्रिया' मॉडल में जोड़ा जाता है:

Unknown column 'response' in 'field list' 

मॉडल में प्रतिक्रिया क्यों शामिल की गई है और मैं इसे कैसे रोकूं?

+0

क्या आप बस एक सशर्त नहीं कर सकते और अपनी PHP स्क्रिप्ट में 'प्रतिक्रिया' को छोड़ नहीं सकते? – swatkins

+0

मैं कर सकता था, लेकिन मैंने सोचा कि यह सर्वर पक्ष को प्रतिक्रिया का फैसला करने के लिए क्लीनर होगा। – GijsjanB

+0

क्या आपका मतलब "क्लाइंट" पक्ष है? – swatkins

उत्तर

7

मॉडल save पर बैकबोन के दस्तावेज़ से:

मॉडल की एक हैश गुण सेट करें, और सर्वर के लिए मॉडल सिंक। यदि सर्वर एक विशेषता हैश को अलग करता है जो अलग है, मॉडल का राज्य फिर से सेट किया जाएगा। http://documentcloud.github.com/backbone/docs/backbone.html#section-41

क्या यह काम करने के लिए करना है: सर्वर से: { "मॉडल बचाया!" "प्रतिक्रिया"} नहीं लौटाते हैं। बिना किसी सामग्री के बस एक सफलता (स्थिति 200) वापस करें।

यदि सहेजना काम नहीं करता है, तो त्रुटियों के साथ एक JSON लौटाएं, और आपके द्वारा प्रदान किए गए JSON के साथ बैकबोन आपके मॉडल पर एक त्रुटि ईवेंट ट्रिगर करेगा (http://documentcloud.github.com/backbone/docs/backbone.html#section-41 और http://documentcloud.github.com/backbone/docs/backbone.html#section-145 देखें)।

6

बस एक प्राचीन धागा फिर से शुरू करने ...

यह हमेशा नहीं प्रतिक्रिया आप सर्वर से वापस पाने को बदलना संभव/वांछनीय है।

एक अन्य समाधान मॉडल में parse ओवरराइड करने के लिए इस का ख्याल रखना है। आपकी स्थिति के लिए, जहां प्रतिक्रिया आपके सभी मॉडलों के लिए अनुचित है, आप इसे सुपरक्लास में कर सकते हैं।

MyModel = Backbone.Model.extend({ 
    parse: function(data) { 
     delete data["success"]; 
     return data; 
    } 
}); 

Address = MyModel.extend({ 
    saveCountry: function() { 
     this.model.save({},{ 
      success: function(model, response) { 
       console.log('success! ' + response); 
      }, 
      error: function(model, response) { 
       console.log('error! ' + response); 
      } 
     }); 
     this.render(); 

     return false; 
    }, 

    ... 

}); 
संबंधित मुद्दे