우리는 모델을 가져올 때마다 "id"속성을 설정하기 위해 Backbone.sync를 오버라이드하려고합니다. 이렇게하면 fetch()가 id로 응답하지 않아도 업데이트이 발생하고 은이 아니라 다음 model.save()가 생성됩니다.Backbone.sync를 재정의합니다.
Backbone._sync = Backbone.sync;
Backbone.sync = function(method, model, options) {
var params = _.clone(options);
params.success = function(model) {
if(method == 'read' && model.isNew()) {
var id = Math.floor(Math.random()*1000);
model.set({ "id": id });
}
if(options.success) options.success(model);
};
Backbone._sync(method, model, params);
}
그러나 성공 함수로 전달 된 모델은 백본 모델이 아니라 단지 개체 인 것처럼 보입니다. 그래서 어떤 method (예 : model.isNew())도 사용할 수 없습니다. 내가 뭘 잘못했는지 생각해?
동의. 'Backbone.sync'는 전송/프로토콜에 관한 것입니다. "create", "update"등 동사를 기술에 매핑하는 작업을 덮어 씁니다. 기본적으로'Backbone.sync'는 HTTP/REST입니다. 그러나 Socket.io 또는 로컬 저장소와 같은 다른 것을 원할 경우 변경할 수 있습니다. ID로 설정 한 것과 같은 데이터로 무언가를하고 싶다면, 제안하는 것처럼 모델에서 발생해야합니다. –
아주 완전한 대답, 내 문제를 해결. 고마워. –
@BrianGenisio 구문 분석 및 가져 오기의 성공 콜백을 사용하는 방법을 알려주시겠습니까? 나는 파스를 사용하여 메타 데이터를 분리 한 다음 렌더링 논리를 성공으로 끌어들입니다. 하지만 model.parse를 정의하면 success 콜백 함수가 호출되지 않습니다. – BlackDivine