서버

2011-09-12 2 views
17

에서 단일 백본 모델을 가져 오기 내가 경로 설정이 말 :서버

'photos/:id' : 'showPhoto' 

을 누군가가 URL을 공유 : www.mysite.com/photos/12345를 친구와 함께.

친구가 공유 링크를 클릭하면 showPhoto이 호출되어 12345가 id로 전달됩니다.

showPhoto: (id) -> 
    photo = new models.Photo _id:id 
    photo.fetch #does a GET to /photos, I would have expected it to request /photos/12345 
    success:() -> 
     render photo view etc... 

Photo = Backbone.Model.extend 
    idAttribute: '_id' 
    urlRoot: '/photos' 
: 나는 그것의 ID 속성을 설정하고) (가져 오기를 호출하는 경우에도 때문에, 서버에서 모델을 가져 오는 방법을 알아낼 질수 백본 모델 isNew와 그렇게 아약스 요청 URL 그냥 /photos 대신 /photos/12345이라고 생각

모델 Photo은 대개 컬렉션의 일부이지만이 시나리오에서는 누군가가 직접 사이트를 방문하여 한 장의 사진에 대한 데이터 만 볼 것으로 예상하므로 컬렉션의 상태가 앱 상태에서 인스턴스화되지 않습니다.

전체 사진 컬렉션을로드하고 collection.getById(id)을 사용하는 해결책은 무엇입니까? 이것은 단지 하나의 모델에 대한 속성을로드하려는 경우 너무 비효율적 인 것처럼 보입니다. 나는이 같은 거기에 하나 개의 모델 (페이지에 다음 렌더링에 의해) 컬렉션을 부트 스트랩 것

답변

25

모델을 컬렉션의 일부로 사용하지 않으면 전체 URL을 수동으로 모델에 알려야합니다. 당신이 지정한 urlRoot에 id를 자동으로 추가하지는 않습니다. 이 작업을 수행 할 수있는 UrlRoot에 같은 기능을 지정할 수 있습니다 : 그것은 새로운 아닌지

Photo = Backbone.Model.extend({ 
    urlRoot: function(){ 
    if (this.isNew()){ 
     return "/photos"; 
    } else { 
     return "/photos/" + this.id; 
    } 
    } 
}); 

백본 결정하기 위해 모델의 id을 사용하여,이 코드가 제대로 작동해야한다는 설정 그래서 일단. 그렇지 않으면 isNew를 확인하는 대신 항상 if 문에서 ID를 확인할 수 있습니다.

+0

Derick, 어떻게 백본에 대해 많이 배웠습니까? 확실한 가이드를 찾지 못했습니다. Addy Osmani의 Fundamentals and Recipes with Backbone을 비롯하여 수많은 블로그가 나와 있습니다. 당신은 대부분보다 더 깊은 이해를 가지고있는 것 같습니다. 어디서 들었 니? – AndrewHenderson

+10

시도와 오류, 백본 소스 코드 읽기, 내가 할 수있는 모든 것을 읽고, 내가 자바 스크립트에 관해 할 수있는 한 많은 것을 배울 수 있지만, 대부분 다른 사람들을 가르치려고한다. 다른 사람들을 가르치면 깊게 파고 들어가서 무슨 일이 벌어지고 있는지 정말로 이해하게됩니다. :) –

+1

이것은 Backbone의 API가 개선됨에 따라 날짜가 답이 된 것 같습니다. 이 답변을 개선 할 수 있습니까? – sankargorthi

1

: 내가 사용하는 서버 측 코드가 ASP.Net MVC 그렇게 사용하다

photos = new PhotoCollection(); 
photos.reset([ @Html.ToJson(Model) ]); 

하는 것으로

귀하의 서버 측 아키텍처에 특정한 것입니다. 또한 대괄호는 단수의 모델을 가져 와서 배열로 감싸는 것처럼 중요합니다.

희망이 있습니다.

3

모든 설명있다 id를 추가할지 여부를 백본에 알릴 필요가 없습니다. 문서에 따라 : http://backbonejs.org/#Model-fetch, 당신은 단순히 urlRoot를 컬렉션의 url과 동일하게 설정할 수 있습니다.

등뼈가 자동으로 다음 방법 중 하나를 사용 제공, URL에 원하는 ID를 추가합니다 : 수동 모델에 직접 속성의 해시 ID를 설정하거나 경우

model.set("id", 5); //After initialized 
model = new Backbone.Model({id: 5}); //New model 

을, 백본 '수상 그것을 의식하지 마라.

model.id = 5; //Don't do this!