2011-10-06 3 views
10

나는 다음과 같은 모델이 있습니다백본 기본값은 속성 변경에 참조되는

var Soq = Backbone.model.extend({ 
    default:{ 
     'name': 'something' 
     , 'parents': []  //array will be passed by reference to attributes hash on new object instantiation 
    } 
}); 

나는 자바 스크립트 및 백본하지만 새로운 오전을 나는 일이 될 수도 어떻게 생각 소스에서 찾고이 모델의 속성으로 설정받을 때이다 기본값 (backbone.js : 137)이며 기본값은 참조로 수행되는 객체입니다. 이것은 즉, I는 다음과 같이 수행 할 때

var soq = new Soq; 
var parents = soq.get('parents'); 
parents.push('parent');    //changes defaults of the proto object 

var soq2 = new Soq; 
console.log(soq2.get('parents');); //will output ['parent'] 
console.log(soq2.defaults.parents); //will output ['parent'] 

오전 내가 올바르게 이해하고, 그렇게 어떤 일이 언제 미래의 인스턴스를 참조 변경 그들을 따라하지 않고 객체 기본값을 설정하는 가장 좋은 방법은 경우 ?

제가 명확하지 않거나 오해하고 있다는 것을 알려주세요. 시간 내 주셔서 감사드립니다.

답변

27

"부모"속성은 프로토 타입에 설정되어 있으므로 모든 인스턴스에서 동일하게됩니다. 즉, 모델을 구성 할 때 동일한 객체가 모델을 설정하는 데 사용되므로 동일한 배열 참조를 얻게됩니다.

대신 새 모델을 만들 때마다 새 기본값 개체를 만들려고합니다. 백본을 사용하면 기본값으로 함수를 정의 할 수 있습니다.

defaults: function() { 
    return { 
     name: 'something', 
     parents: [] 
    }; 
} 
+0

여러분의 도움에 감사드립니다. – Mitya

+1

감사합니다. 대단합니다. 내가 이것을보기 전에'initialize()'함수로 모든 종류의 성가신 체크를하고 있었다. 해결책은 지금 명백하게 보인다 :) – fiznool