2012-11-14 11 views
19

मैं इस का उपयोग कर बचाने फोन के बजाय डाल भेज रहा है:बैकबोन model.save() पोस्ट

console.log(this.model.isNew()); 
console.log(this.model); 

this.model.save({}, { 
    success: function (model, response, options) { 
     console.log(response); 
    }, 
    error: function (model, xhr, options) { 
     console.log(xhr.result.Errors); 
    } 
}); 

isNew() रिटर्न झूठी। लेकिन this.model के उत्पादन 0. का एक आईडी (this.model.id 0 के रूप में अच्छी तरह से है)

मेरे यूआरएल url: ROOTAREA + "/Expenses/Entry/",

अद्यतन कर रहा है ठीक काम करता है, और उम्मीद के रूप में डाल का उपयोग करता है है।

संपादित करें:

defaults: function() { 
     return { 
      DocumentDate: "", 
      JobNo_: "", 
      PhaseCode: "", 
      WorkTypeCode: "", 
      Description: "", 
      Quantity: 0, 
      UnitCost: 0, 
      ExpenseCurrencyCode: "", 
      ReimbursementCurrencyCode: "", 
      UnitofMeasureCode: "DIEM", 
      LineNo_: 0 
     }; 
    }, 
    idAttribute: "LineNo_", 

उत्तर

27

आईडी भी एक नई प्रविष्टि के लिए मौजूद नहीं करना चाहिए: यहाँ अपने मॉडल का हिस्सा है। समस्या उस भाग में है जिसे आपने नहीं दिखाया - उस हिस्से में जहां आप तत्काल, मॉडल बनाते और बनाते हैं। करता

तो मॉडल अभी तक एक id नहीं, यह नया माना जाता है:

यहाँ the Backbone documentation से एक उद्धरण है।

यह आपके कोड से स्पष्ट है कि आप एक आईडी विशेषता निर्दिष्ट कर रहे हैं। आपका बैकएंड ऐसा करना चाहिए। और चूंकि आप एक ग्राहक पर कर रहे हैं, रीढ़ की हड्डी यह कोई नई बात नहीं मान लिया जाता है, और का उपयोग करता है PUT

+0

मैं अपनी पोस्ट मॉडल प्रदर्शित करने के लिए एक संपादन किया है। क्या मुझे LineNo_ को 0 के अलावा किसी अन्य चीज़ में बदलना चाहिए? – Rail24

+0

@ रेल 24 इसे पूरी तरह हटा दें, अगर आप कर सकते हैं। बैकबोन आईडी को शून्य के खिलाफ जांचता है कि यह नया है या नहीं। Http://documentcloud.github.com/backbone/docs/backbone.html#section-63 – nikoshr

+0

मैंने LineNo_ को डिफ़ॉल्ट रूप से शून्य में बदल दिया और यह मेरी समस्या हल हो गई! धन्यवाद टिनिनोज! – Rail24

2

आप चूक में आईडी निर्दिष्ट कर सकते हैं, बस यकीन है कि यह शून्य पर सेट है बनाने

(isNew सही पर सेट किया जाएगा)
19

उपर्युक्त उत्तर उसमें सही हैं यदि model आप .save 'आईएनजी id विशेषता है रीबोन के बजाय PUT करेगा।

यह व्यवहार बस अपने को बचाने ब्लॉक करने के लिए type: 'POST' जोड़कर अधिरोहित जा सकता है:

var fooModel = new Backbone.Model({ id: 1}); 

fooModel.save(null, { 
    type: 'POST' 
}); 
+2

आपकी पोस्ट के लिए धन्यवाद, इससे मुझे एक ही मामले में मदद मिली। मुझे पता चला कि (बैकबोन स्रोत पढ़ रहा है) कि आपको मॉडल बनाने, इसे सहेजने और फिर संग्रह में जोड़ने की आवश्यकता नहीं है, आपको संग्रह के निर्माण() विधि में 'POST' टाइप करना होगा: fooCollection.create ({id: 1}, {type: 'POST'}); – Shu

+0

अन्य समाधानों के लिए देखें: [PUT के बजाय POST का उपयोग करने के लिए Backbone.sync अद्यतनों को बल देने के लिए कम से कम बदसूरत तरीका क्या है?] (Http://stackoverflow.com/q/8527694/1218980) –

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