2012-05-15 8 views
0

:백본 JS 모델 응답 배열

var Mdl = Backbone.Model.extend({ 

    defaults:{ 
    test: new Backbone.Collection() 
    } 
}); 

지금은이 모델에 가져 않는 말할 수, 그리고 내 서버 측에서 응답 배열이라는 "test"라는 속성이 있습니다. 내 컬렉션에 배열을 추가하거나 백본 컬렉션을 유지할 수 있도록이 배열로 다시 설정하고 싶습니다. 그러나 예상대로 내 모델에서 재설정을 실행하면 기본적으로 수행되지 않습니다. "테스트" 속성을 배열에 응답으로 추가합니다.

"test"응답 속성을 배열 대신 백본 컬렉션으로 처리하는 가장 좋은 방법은 무엇입니까? 기본적으로 속성이 배열인지 확인한 다음 속성이 컬렉션에 모델에 이미 정의되어 있는지 확인한 다음 배열을 사용하여이 컬렉션을 다시 덮어 쓰지 않고 다시 설정해야합니다.

내 백본 동기화를 만들면이 작업을 수행 할 수 있지만이 작업이 가장 좋은 방법인지 확실하지 않습니다. 어떻게 생각합니까?

감사합니다.

+0

동기화에는 재정의가 필요하지 않습니다. Backbone은'response'를 취하는 parse 메소드를 제공합니다. http://documentcloud.github.com/backbone/#Model-parse 이제 원하는 것을하기 위해 코드를 작성해야합니다. – Deeptechtons

+0

실제로 이것을합니까? 'new Backbone.Collection()'오히려 아래와 같이 컬렉션의 인스턴스를 만듭니다. 'var tstCol = Backbone.Collection.extend ({}); ... 기본값 : {test : new tstCol()} ...' – Deeptechtons

답변

0

Model.defaultscheck this answerObjects을 정의하면 가장 이상한 문제가 발생할 것입니다.

당신이 정말로이 지연 함수를 수행하려고하고 싶은 경우입니다

// code no tested 
var Mdl = Backbone.Model.extend({ 
    defaults:{ 
    test: function() { return new Backbone.Collection() } 
    } 
}); 

아직도 내가 생각하는 좋은 생각, 정말 내가 생각 Model.attributes에 기본 값을 선호하지 무엇을이다 백본이 기대하고 있습니다.

나는 test_data라는 키가와 Model.initialize에 손으로 구문 분석 서버 JSON 응답을하고있다이 경우에 무엇을 :

Check this SO question

Model.get("test_data") 원시 데이터와 것을 볼

// code no tested 
var Model = Backbone.Model.extend({ 
    initialize: function(){ 
    this.test = new Backbone.Collection(this.get("test_data")); 
    } 
}); 
실제 개체가 Model.test 인 경우이 마지막 숫자는 Model.attributes에 포함되지 않습니다.

0

나는 이런 종류의 문제로 Backbone Relational을 사용합니다.

관계를 정의하려면 다음과 같은 코드를 작성하십시오.

Mdl = Backbone.RelationalModel.extend({ 
    relations: [{ 
      type: Backbone.HasMany, 
      key: 'test', 
      relatedModel: 'TestModel', 
      collectionType: 'TestCollection', 
      reverseRelation: { 
       key: 'mdl' 
      } 
     }] 
}); 

TestModel = Backbone.RelationalModel.extend({}); 

TestCollection = Backbone.Collection.extend({ 
    model: TestModel 
}); 

그러면 테스트 속성이 백본 컬렉션으로 바뀝니다.