2012-01-11 3 views
1

서버에서 반환 한 엔터티를 제어 할 수없는 백본 응용 프로그램을 작성하고 있습니다.Backbone.js : 모델과 서버 응답의 차이를 처리하는 방법

서버에서 사용하는 JSON과 약간 다른 데이터의 내부 표현을 갖는 것이 편리하다는 것이 밝혀졌습니다. 한 방향으로는 쉽습니다. Model.parse() 메서드를 써서 서버에서 반환 한 JSON을 입력으로 받아 내 개체의 특성을 반환 할 수 있습니다.

나는 다른 방향으로 무엇을해야할지 잘 모르겠다. 내 개체를 저장하기 위해 직렬화 할 때 호출되는 메서드를 찾을 수 없습니다. Model.toJSON()이 있지만 모델을 저장하기 전에 사용하지 않는 것 같습니다.

어떻게이 차이를 처리해야합니까?

답변

2

처음으로 - annotated source은 백본에 대한 질문에 대한 답변을 찾는 가장 좋은 장소입니다.

그렇게이 방법을 무시하는 것은 당신이 필요로하는 무엇을 달성해야 모델이 JSON.stringify(model.toJSON()) (당신이 emulateJSON를 사용하지 않는 추정)를 사용하여 직렬화 것을 볼 Backbone.sync의 소스에서 수 찾고있다. 테스트 케이스가 줄어들지 않으면 왜 이것이 작동하지 않는지 설명 할 수 없습니다.

더 긴 대답은 서버 - 클라이언트 동기화를 완벽하게 제어하려면 자체 Backbone.sync 구현을 작성해야한다는 것입니다. 이 방법은 매우 간단하며 (주석이 달린 소스 참조) 간단한 변경 만 원한다면 원래 동기화를 간단히 감쌀 수 있습니다. 예를 들어

:

function mySyncFunction(method, model, options){ 
    if(method == 'create' || method == 'update'){ 
    options.contentType = 'application/json'; 
    options.data = model.serializeForServer(); //You will need to write this method 
    } 
    return Backbone.sync(method, model, options); 
} 

그냥 모델의 일부

var myModel = Backbone.Model.extend({ 
    ... 

    "sync": mySyncFunction, 

    ... 
}); 
+0

당신을 감사로 선언 사용자 정의 동기화 방법을 사용하려면! 백본에 localStorage 어댑터를 사용하고 있는데, toJSON 메서드를 호출하지 않습니다. 나는 그것을 수동으로 패치했고, 나는 그것을 업스트림으로 밀어 넣는 방법도 점검 할 것이다. – Andrea

관련 문제