0

백본 컬렉션이있는 백본 모델이 있습니다. 모델을 저장할 때 성공하면 모델 개체가 올바르게 구성됩니다. 그러나 오류가 발생할 때 (유효성 검사 오류) 오류 콜백에서 모델 객체가 수정됩니다 (모델 객체 내의 컬렉션이 Array로 변환 됨). 결과적으로 해당 컬렉션에 대해 정의 된 모든 함수가 "정의되지 않음"이되어 오류가 발생합니다.성공 콜백 및 오류 콜백에서 볼 수있는 백본 모델이 다릅니다. # 백본 저장

save : function() { 
     this.model.save(_.extend(originalModel.toJSON() || {}, this.model 
       .toJSON()), { 
      success : this.onSaveSuccess, 
      error: this.onSaveError, 
      include : [] 
     }); 
    }, 

    onSaveSuccess : function(model) { 
     //Here the model is properly structured 
    }, 


    onSaveError : function(model, response) { 
     // Here the model is modified, all collections are now array 
     //I have to explicitly call my parse method to re structure it. 
     model = model.parse(model.attributes); 
    } 

나는 왜 이런 일이 일어나고 있는지 알고 싶습니다. 내가 여기서 뭔가 잘못하고있는거야?

+0

위의 코드에서 'originalModel'은 어디에서 왔습니까? –

답변

2

이 예제에서는 컬렉션을 보유하고있는 모델의 속성을 "사람"이라고 가정합니다. 그것은 명확하게 문서화되어 있지 않습니다 만, model.save(attributes) 실제로처럼 동작 : save(...)

model.set(attributes); 
model.save(); 

Here's the relevant annotated source. 코드에서 수행하는 작업은 먼저 "people"속성을 배열 사람으로 설정 한 다음 저장하려고 시도하는 것입니다. 저장에 실패하면 모델에 배열이 있고 컬렉션에는 "people"값이 있습니다.

귀하의 종점이 모델의 전체 표현을 성공으로 반환하고 있으며 귀하의 모델이 정확하게 그 표현을 & 콜렉션을 다시 파싱하고 있다고 의심됩니다. 하지만 오류 처리기에서 자동으로 처리하지는 않습니다.

제 경험으로는 컬렉션이 포함 된 모델은 관리하기가 어렵습니다. & 이유가 있습니다. 필자는 데이터 배열을 포함하는 Model을 가지고 행운을 빕니다. 그리고 그 모델에 대한 메서드를 가져 와서 즉석에서 Collection을 만들 수 있습니다. 같은 : 또한 응용 프로그램의 똑똑한 데이터 레이어를 제공하는 동시에는, (꽤 불필요) 서버 통신에서 컬렉션 개념을 제거

var MyModel = Backbone.Model.extend({ 
    // ... 

    getPeople: function() { 
     // See if we've previously built this collection 
     if (!this._peopleCollection) { 
      var people = this.get('people'); 
      this._peopleCollection = new Backbone.Collection(people); 
     } 
     return this._peopleCollection; 
    } 
}); 

(스마트 모델은 좋은 일이다).

+0

예 끝점은 성공시 모델의 전체 표현을 반환하고 오류 처리기는 자동으로 처리하지 않습니다. 하지만 옵션 {wait : true}를 설정하면 모든 것이 잘 작동합니다. 내 모델 상태가 유지됩니다. – ashy143

0

이 해결책은 옵션으로 wait:true을 전달하는 것입니다. 서버가 유효한 응답을 반환 할 때까지이 값은 수정되지 않습니다.

save : function() { 
    this.model.save(_.extend(originalModel.toJSON() || {}, this.model 
      .toJSON()), { 
     success : this.onSaveSuccess, 
     error: this.onSaveError, 
     **wait:true** 
     include : [] 
    }); 
}, 
관련 문제