2012-11-14 4 views
19
내가 이것을 사용하여 저장 전화

의 PUT 보내는 :백본 model.save는() 대신 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() false를 반환합니다. 그러나 this.model의 출력은 0의 ID를 (this.model.id뿐만 아니라 0)

내 URL이 url: ROOTAREA + "/Expenses/Entry/",

업데이트가 잘 작동, 예상대로 PUT 사용합니다 있습니다.

편집 :

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

답변

27

ID도 새 항목이 존재하지 않아야 : 여기 내 모델의 일부입니다. 문제는 모델을 인스턴스화하고 생성하고 채우는 부분에 표시되지 않은 부분에 있습니다. 모델이 아직 id이없는

경우, 새로운 것으로 간주됩니다 : 여기

the Backbone documentation에서 인용 한 것입니다.

코드에서 사용자가 id 특성을 할당하는 것이 분명합니다. 백엔드가 그렇게해야합니다. 그리고 당신은 클라이언트에서 그 일을하고 있기 때문에, 백본이는 새로운 것이 아니다을 가정하고, PUT

당신은 기본 설정에서 ID를 지정할 수 있습니다
+0

나는 모델을 보여주는 내 게시물에 편집을했습니다. LineNo_를 0이 아닌 다른 것으로 변경해야합니까? – Rail24

+0

@ Rail24 가능한 경우 완전히 제거하십시오. 백본은 ID가 null인지 여부를 확인하기 위해 null을 확인합니다. http://documentcloud.github.com/backbone/docs/backbone.html#section-63 – nikoshr

+0

을 참조하십시오. LineNo_가 null로 기본값으로 변경되었으며 문제가 해결되었습니다. 감사합니다 toninoj! – Rail24

2

, 그냥 null로 설정되어 있는지 확인합니다

(isNew는 true로 설정됩니다)
19

위의 대답은 model.save '에 id이라는 특성 백본이있는 경우 POST 대신 PUT이됩니다.

이 동작

단순히 저장 블록에 type: 'POST'을 추가하여 대체 할 수 있습니다 :

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

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

귀하의 게시물에 감사드립니다, 그것은 비슷한 경우에 나를 도왔습니다. 모델을 만들 필요가없고 모델을 저장하고 컬렉션에 추가 할 필요가 없다는 것을 알게되면 (백본 소스 읽기) 컬렉션의 create() 메소드에 'POST'를 입력하면됩니다. fooCollection.create ({id : 1}, {type : 'POST'}); – Shu

+0

다른 솔루션의 경우 [PUT 대신 POST를 사용하도록 Backbone.sync 업데이트를 강제로 실행하는 가장 이상한 방법은 무엇입니까?] (http://stackoverflow.com/q/8527694/1218980) –