2012-01-30 3 views
3

방금 ​​Backbone.js를 사용하기 시작했습니다. Collection을 만들고 외부 소스에서 데이터를 추가하고 싶습니다.Backbone.js : Ajax를 사용하여 Collection에 데이터를 바인딩 하시겠습니까?

이 데이터는 CSV,하지 JSON 현재 사실이지만, 그 많은 쉽게 될 것입니다 경우 내가 JSON에서 다시 렌더링 할 수있다.

그래서, 두 가지 질문 :

  1. 어디 컬렉션에 외부 데이터를 결합 하는가? url 속성을 지정하지 않으면 불만을 토로하지만 실제로 URL을 염두에두고 있지 않습니다. 저는 Ajax를 통해 데이터를 바인딩 할 계획이었습니다.
  2. 는 차라리 CSV보다는 JSON에서 내 데이터를 렌더링 다시, 그것을로드 컬렉션의 url 속성을 사용해야합니까?

것은 그냥 오히려 url 속성을 통해보다 직접 컬렉션에 데이터를로드를 시도 :

var Cat = Backbone.Model.extend({}); 
var CatCollection = Backbone.Collection.extend({ 
    model: Cat 
}); 
var ajaxData = { 'breed' : 'persian' } // simple example of external data 
var catCollection = new CatCollection(ajaxData); 
catCollection.fetch(); 

그러나 이것은 오류가 있습니다 : Uncaught Error: A "url" property or function must be specified합니다.

+0

하지만 당신은 아약스 호출에 대한 URL을해야합니다. –

+0

아, 그래서 URL을 지정하고 JSON이라면 "그냥 작동"해야합니까? URL이 CSV 파일 인 경우 어떻게됩니까? – Richard

답변

7

어느 컬렉션

var ajaxData = [{ 'breed' : 'persian' }]; // Backbone.Collection expects an array 
var catCollection = new CatCollection(ajaxData); 
// catCollection.fetch(); fetch will try to update the data from the server 

또는 내장 된 URL/모델을 구축하는 구문 분석 사용에 대한 가져 오기 방법을 사용하지 않고 다른 곳에서 생성 된 배열과 컬렉션을 다시 설정/초기화

var CatCollection = Backbone.Collection.extend({ 
    model: Cat, 
    url: "your ajax source", 
    parse: function (csv) { 
     //convert your csv in an array of objects 
     return csvtoarray; 
    }, 
    fetch: function (options) { 
     options = options || {}; 
     options.dataType = "text"; 
     return Backbone.Collection.prototype.fetch.call(this, options); 
    } 
}); 
var catCollection = new CatCollection(); 
catCollection.fetch(); 

데이터 서버 측에서 JSON으로 변환하는 것이 JS에서 CSV 파서를 작성하는 것보다 쉬울 것이다.

+0

위대한 답변, 감사합니다. – Richard

+1

는 두 번째 방법 - 재정의 구문 분석은 - 분명 바람직하지만, 지금까지의 내가 작동하지 않습니다 말할 수 : 동기화 방법은 구문 분석을 호출하지 않습니다 그래서 JSON을 수신하지에 오류가 발생합니다. 내가해야 할 일은 Backbone.sync를 무시하고 파싱하는 것입니다. 나는 어쨌든이 기회를 줄 예정이다. –

+1

@TomP 맞아, 데이터 유형이 누락되었습니다. 그러나 오버라이팅 가져 오기 충분해야합니다. – nikoshr

관련 문제