2012-03-06 3 views
1

모든 요청에 ​​대해 Accept 헤더에서 Media Type을 사용하는 API 설정이 있습니다. 시작하기 모델의 가져 오기 및 저장 기능을 간단히 감쌌지만 모든 모델 및 컬렉션에서 더 나은 방법이 있는지 궁금했습니다.모든 backbone.js REST 요청의 미디어 유형

업데이트 위의 예에서와 같이

var accountsCollection = Backbone.Collection.extend({ 
    model: accountModel, 
    url: '/api/accounts', 
    vnd: 'application/vnd.app.AccountFeed+json', 
    return resp.Items; 
    }, 
    search: function (q) { 
     this.fetch({ 
      headers: { Accept: this.vnd }, 
      data: { 
       q: q 
      }, 
      success: function (data) { 
       //console.log(q); 
      } 
     }); 
    } 
}); 

, 나는 때문에 사용자 정의 헤더를 수락해야 할 필요성을 가져 래핑하는 데 문제가 있습니다. 내 생각에 완벽한 솔루션은 컬렉션 또는 모델의 vnd 값을 자동으로 가져 오도록 & 페치를 확장 할 수 있어야합니다. 이게 내가 묻고있는 것이 더 명확 해 졌기를 바란다.

답변

2

백본은 CRUD 작업을 사용자 지정하기 위해 sync adapter이라는 개념을 사용합니다. 각 컬렉션/모델에는 사용자 정의 http 어댑터를 적용 할 수있는 고유 한 동기화 메소드가있을 수 있습니다. 우지의 대답 떨어져 Riffing

var MyModel = Backbone.Model.extend({ 
    sync: function(method, model, options) { 
     var options = options || {}; 
     options.Accept = model.vnd; 
     return Backbone.sync(method, model, options); 
    } 
}); 
+0

+1 좋은 조정 – rjz

+0

도움을 주셔서 감사합니다 ... @ rjz 너무. 나는 그것이 작동하도록 수정해야 할 것에 대한 생각을 가지고 있다고 믿는다. 고맙습니다. – Seth

2

, 당신은 또한 당신의 자신의 Backbone.sync 기능을 제공 고려해 볼 수 있습니다 :

코드는 같을 수 있습니다. Model.fetch()은 über-sync 함수에 위임을 끝냅니다. 즉, Accept 헤더를 포함하는 패치는 응용 프로그램이 요청할 때마다 헤더가 전달되도록합니다.

Backbone.sync을 수정하는 좋은 예는 Backbone/localStorage 데모의 annotated source에서 찾을 수 있습니다.

관련 문제