2012-11-14 2 views
19
Bunu kullanarak tasarruf diyoruz

ait PUT gönderme edilir:Backbone model.save() yerine POST

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() döner false. Ama this.model çıkışı 0'a bir kimliği (this.model.id yanı 0'dır)

Benim url url: ROOTAREA + "/Expenses/Entry/",

Güncelleniyor çalışıyor ve beklendiği gibi PUT kullanır olduğunu vardır.

Düzenleme:

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

cevap

27

kimliği bile yeni bir giriş için var olmamalıdır: burada modelinin bir parçası. Sorun, göstermediğiniz bölümdür - modeli oluşturduğunuz, oluşturduğunuz ve doldurduğunuz bölümde. modeli henüz bir id yok

ise, yeni olarak kabul edilir: Burada

the Backbone documentation bir alıntı.

Size id niteliği atama olduğunu kodunuzdan açıktır. Arka uçınız bunu yapıyor olmalıdır. Ve eğer bir istemci üzerinde bunu yapıyor çünkü, omurga bunu yeni değil varsaymaktadır ve PUT

Sen varsayılan içinde kimliği belirleyebilirsiniz
+0

Ben modelini gösteren görevime geri bir düzenleme yaptık. LineNo_'ı 0'dan başka bir şeye değiştirmeliyim? – Rail24

+0

@ Rail24 Bunu yapabilirseniz, tamamen kaldırın. Omurga yeni olup olmadığını belirlemek için kimliği null değerine karşı kontrol eder. Bkz. Http://documentcloud.github.com/backbone/docs/backbone.html#section-63 – nikoshr

+0

LineNo_ öğesini varsayılan olarak null olarak değiştirdim ve sorunumu çözdü! Teşekkürler toninoj! – Rail24

2

, sadece boş olarak ayarlanmış olduğundan emin olmak kullanır

(isNew true olarak ayarlanır)
19

Yukarıdaki yanıtlar, model.save 'ing id özniteliğine sahipse POST yerine PUT yapacaktır.

Bu davranış

sadece tasarruf bloğuna type: 'POST' ekleyerek geçersiz kılınabilir:

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

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

Yayınınız için teşekkürler, benzer bir durumda bana yardımcı oldu. Modeli oluşturmanıza, kaydetmenize ve daha sonra koleksiyona eklemenize gerek kalmayacağını (Backbone kaynağını okuyarak) öğrendim, sadece türünü geçmek zorundasınız: 'POST', koleksiyonun create() yöntemine: fooCollection.create ({id: 1}, {type: 'POST'}); – Shu

+0

Diğer çözümler için, bkz: [Backbone.sync güncelleştirmelerini PUT yerine POST kullanmaya zorlamanın en az çirkin yolu nedir?] (Http://stackoverflow.com/q/8527694/1218980) –