2011-12-11 4 views
44

Backbone.js를 사용하여 모델/뷰/컬렉션을 작성했습니다. 내 콜렉션은 fetch 메소드를 사용하여 원격 서버에서 모델을로드합니다. 이 컬렉션에 필요한 url은 다음과 같은 id가 필요합니다. messages/{id}. 그러나 나는 콜렉션에 옵션을 전달할 수있는 확실한 방법을 찾지 못했습니다.Backbone.js 컬렉션 옵션

보기에서 backbone.js보기는 view ([options])를 전달하여 옵션을 허용하지만 컬렉션은 생성시 모델 목록 (collection ([models]))을 필요로합니다.

매개 변수/옵션을이 컬렉션에 전달하는 "가장 깨끗한"방법은 무엇입니까?

단축 코드 : 브라우저가 처음에 자바 스크립트 파일을로드 할 때

var Messages = Backbone.Collection.extend({ 
model: Message, 
    url: 'http://url/messages/' + id 
}); 
+4

어쩌면 상대 URL을 사용하는 것이 더 좋은 아이디어입니까? – malletjo

답변

107

예를하지만 그것은 url 속성은 함수가 될 수 있다는 것을 주목할 가치가있다. 제 생각에는 더 자세한 경우, 코드, 좀 더 읽기 (그리고는 최종 결과가 동일하기 때문에, 단지 의견의) 당신은 initialize의 ID를 설정하고있는 경우 함수에서 기준이 :

var Messages = Backbone.Collection.extend({ 
    initialize: function(models, options) { 
    this.id = options.id; 
    }, 
    url: function() { 
    return '/messages/' + this.id; 
    }, 
    model: Message, 
}); 

var collection = new Messages([], { id: 2 }); 
collection.fetch(); 

id을 모델 id과 혼동하지 않는지 확인하십시오. 맞습니까? @ Paul의 답변과 위의 코드는 Messages 컬렉션이 여러 개 있다고 가정하고 각각은 고유 한 ID를가집니다. API 경로 /messages/<id>이 실제로 메시지 집합이 아닌 메시지을 참조하는 경우 컬렉션에 url/messages/으로 설정하기 만하면 백본에서 각 모델에 대해 /messages/<id>을 자동으로 사용합니다.

+3

이렇게 간단하고 명료 한 예를 들어 주셔서 감사합니다. 나는 당신의 대답을 볼 수 있었으면 좋겠다. 나는 하루를 구했을 것이다 .... 다시 한번 감사드립니다. – Shubh

+0

예, 결과가 나에게 정의되지 않았습니다. 아래 답변은 작동합니다. –

23

당신이 url 속성 선언이 방법, 값이 한 번 결정되고, 'ID는'정의되지 않습니다.

Backbone.Collection은 생성자에서 두 번째 인수로 옵션을 허용하므로 id 값을 옵션으로 전달한 다음 컬렉션의 initialize 함수에서 url 값을 설정할 수 있습니다. 바울의 대답은 좋은 @

여기

var Messages = Backbone.Collection.extend({ 
    initialize: function(models, options) { 
    this.url = 'http://url/messages/' + options.id; 
    }, 
    model: Message, 
}); 

var collection = new Messages([], { id: 2 }); 
collection.fetch(); 
관련 문제