Backbone.js를 시도하고 있으며 내가 시도하는 것 중 하나는 원격 API를 호출하는 것이므로 documentation을 이해 하면서 Backbone.sync를 재정의 할 수 있어야합니다 .
문서 자체 에서이 작업을 수행하는 방법에 대한 예는 없으며 Backbone에 대한 Google 그룹이없는 것 같습니다 … 누군가가 이것을 수행하는 예를 지적 할 수 있습니까?
답변
이 주석이 달린 소스 예제를 살펴보고 Backbone.sync
로컬 스토리지 대안으로 덮어 씁니다.
기본적으로 Backbone.sync는 4 개의 인수를받는 함수 여야합니다.
Backbone.sync = function(method, model, options) { };
성공 했는지 options.success
또는 성공 options.error
했는지에 따라 발사해야합니다 method
. 방법은 다음과 같은 형식으로되어 있습니다.
"create"
: 서버에서 모델을 작성해야합니다."read"
: 서버에서이 모델을 읽고 리턴해야합니다."update"
: 인수를 사용하여 서버에서 모델을 업데이트해야합니다."delete"
: 서버에서 모델을 삭제해야합니다.
이 4 가지 방법을 구현하고 원하는 것을 정의해야합니다. "server"
물론 이것들은 Backbone.sync
반드시 구현 해야하는 것입니다. 더 많은 것을 구현하고 더 methods
많은 매개 변수를 다시 전달할 수 success
있지만 이렇게하지 않는 것이 가장 좋습니다.
Backbone.sync
구현이 아닌 인터페이스에 대한 프로그래밍이 가능하도록 현재 와 동일하게 수행하는 것이 가장 좋습니다 . Backbone.sync
로컬 스토리지와 같은 수정 된 기능을 끄 려면 확장 된 Backbone.sync와 일치하도록 직접 확장 할 필요가 없습니다. “
[편집하다]
또한 여러 구현을 사용할 수 있습니다 sync
. 모든 참조 Backbone.sync
는 (this.sync || Backbone.sync)
실제로 가능하므로 다음과 같은 작업을 수행하면됩니다.
var MyModel = Backbone.Model.extend({
...
"sync": myOwnSpecificSync,
...
});
Backbone.sync
모델에 sync
특별히 설정된 방법 이없는 한 모든 모델에서 사용하는 기본 전역 입니다.
답변
나는이 답변이 너무 늦다는 것을 알고 @Raynos의 답변은 훌륭하지만 조금 다르게 했으므로 Backbone에서 API를 사용하려는 다른 사람이나 다른 사람에게 유용 할 것입니다.
대신 Backbone.sync을 무시, 나는 오버라이드 Backbone.ajax를 아약스 요청이 곳이기 때문에.
예를 들면 다음과 같습니다.
// Set the default implementation of `Backbone.ajax` to proxy through to `$`.
Backbone.ajax = function() {
var args = Array.prototype.slice.call(arguments, 0);
// Here, I add the OAuth token (or any other token)
// But before, I check that data exists, if not I add it
if (args[0]['data'] === undefined) {
args[0]['data'] = {};
}
args[0]['data']['token'] = 'any_api_token_here';
return Backbone.$.ajax.apply(Backbone.$, args);
};
답변
일반적으로 sync
특정 속성 만 동기화해야하는 경우 백본의 방법 을 재정의 해야합니다. 일반적인 구현은 다음과 같습니다.
sync: function (method, model, options) {
options.data = _.pick(this.attributes, 'foo', 'bar', 'baz');
return Backbone.sync.call(this, method, model, options);
}