2013-03-18 3 views
11

나는 다음과 Backbone.js 모음 : 원함/API/V1/태그/ID에 게시하고 해당 모델에 대한 데이터를 저장하도록컬렉션에서 모델을 업데이트하는 방법은 무엇입니까?

var Tags = Backbone.Collection.extend({ 
     url: "/api/v1/tags/" 
}), 

어떻게 컬렉션의 모델 중 하나를 업데이트 할를. 다음 데이터 I 컬렉션 에 ID 2 모델의 이름을 변경하는 경우

그래서 그것은 에 두어야/API는/V1/태그/2 : 이름 : 새 이름 아이디 : 2

+0

당신은'model.save ({name : 'new name'});'시도 했습니까? –

답변

2

당신이 할 수있는 변수를 save 메소드에 전달하십시오. 그것은 (당신이 Backbone.Sync를 오버라이드하지 않는 한) jQuery의 ajax 방법을 사용하는 모든 옵션을 받아

당신은 같은 것을 할 수있는 :

model.save({ name:'new name' })을;

idPUT 메서드는 Backbone에서 자동으로 추가됩니다.

+0

HTTP 패치를 선택적으로 업데이트 할 수 있습니다. –

21

최근 컬렉션의 특정 모델을 업데이트하려고합니다. 문제는 내가 단지 model.save 만 사용하면 컬렉션을 업데이트하지 않는다는 것입니다. 목표는 컬렉션에서 모델을 변경하고 서버에서 변경하고 그에 따라 컬렉션을 업데이트하고 sync 메서드를 사용하지 않는 것입니다. 그래서 예를 들어 변수 collection이 있고 id = 2으로 모델을 변경하고 싶습니다.

그래서 첫 번째 것은,이 같은 인스턴스 모델을 생성합니다 : 다음
model.save({}, {url:'/api/v1/tags/'+model.get('id')})

:
model.set({name: 'new name'})

가 그럼 난 서버에 저장됩니다
var model = collection.get(2)

가 그럼 난이 특정 모델에 대한 속성을 업데이트합니다 변경 사항에 따라 콜렉션을 업데이트해야합니다 :
collection.set({model},{remove: false})

set 메소드 - 매개 변수로 전달한 모델 목록을 사용하여 컬렉션을 '스마트하게'업데이트합니다.
remove: false 매개 변수 - 컬렉션에서 기존 모델을 삭제하는 것은 제한 사항입니다. here.

7

가장 먼저 놓칠 수있는 것은 해당 태그 모델에서 컬렉션의 "url"과 일치하도록 "urlRoot"를 설정해야한다는 것입니다. "또한"() 생성 "컬렉션에

var tag = collection.get(2); 
tag.set({key: "something"}); 
tag.save(); // model.save works because you set "urlRoot" 

: 별도로 태그를 저장하려면

var Tag = Backbone.Model.extend({ 
    urlRoot: "/api/v1/tags" 
}); 

var Tags = Backbone.Collection.Extend({ 
    model: Tag, 
    url: "/api/v1/tags" 
}); 

이 유용 그렇지 않으면 모든 컬렉션에 대해 알고하지 않습니다 id가 null이 아닌 경우는 update()입니다. 혼란스럽지 않습니다. :) 따라서이 이전 샘플과 거의 동일합니다 : 이것은 ID = 2 기존 태그를 업데이트 한 다음 PUT을 트리거

collection.create({id: 2; key: "something"}); 

은.

이것은 고대 질문입니다. 내가 같은 대답을 찾고 있었기 때문에 대답을했습니다. 당신은 아마도이 문제를 해결 한 이후로 오래 머물렀을 것입니다. :)

관련 문제