2011-07-07 8 views
3

모델의 기본 개체를 업데이트하려면 어떻게해야합니까?backbone.js 모델 기본값 업데이트

예를 들어, 아래에 모델링 된 Box 객체가 있다고 가정 해 봅시다. 기본 "색상"속성이 "#FFF"로 설정되어 있습니다.

일단 사용자가 서버와 상호 작용하기 시작하면 서버는 새로운 기본 색 # 000을 다시 전달합니다. 그 시점부터 인스턴스화 된 모든 새 상자를 기본적으로 # 000의 색상 속성으로 지정합니다.

참고로이 업데이트를 수행한다고 가정 할 때 기본값은 참조로 전달되므로 기존 상자의 기본값도 모두 업데이트됩니다. 이 올바른지?

var Box = Backbone.Model.extend({ 
    defaults: { 
     "Colour" : "#FFF" 
    } 
}); 

답변

9

기본값은

Box.prototype.defaults.Colour = '#000' 

쉽게 변경할 수 있습니다 그리고 당신은이를 변경할 때, 이미 생성 된 상자, 깊은 자신의 프로토 타입 체인에 새 값

myBox.__proto__.constructor.prototype.defaults.Colour === '#000' 

이있을 것이다 그것은 중요하지 않으며 myBox.get('Colour')에서 오는 값을 변경하지 않을 것입니다. 기본값이 인스턴스화시 myBox.attributes으로 복사되기 때문입니다. 기존 상자를 변경하려면 myBox.set({'Colour': '#000'}) 또는 myBox.attributes.Colour = '#000'을 사용해야합니다.

3

Color 속성이 실제로 저장된 모델의 상태는 아닌 것 같습니다. 클래스 속성으로하는 것이 더 적절할 수 있습니다. 그래서 당신은이 작업을 수행 할 수 있습니다

var Box = Backbone.Model.extend({ 

    // Instance properties here. 

}, { 

    colour: '#FFF' 

}); 

당신은이 속성을 사용해야하는 경우로서 다음, 당신이 그것을 참조 : 당신이 그것을 변경해야하는 경우, 당신은 필요합니까

Box.colour 

을 :

Box.colour = #000; 

이 접근 방식은 인스턴스 속성이되어야하는 이유가있을 수 있으므로 앱에 적절하거나 적절하지 않을 수 있습니다. 그러나 그것은 클래스의 속성보다 클래스의 인스턴스보다 많은 것처럼 보입니다.

+0

덕분에 내가 Box.prototype.defaults._attribute_ 기술을 위해 특별히 찾고 있었다 @ 빌 (제가 제대로 질문을 해석 바랍니다)하지만, 클래스 속성 대 인스턴스에 대한이 토론도 유용하다. – fortuneRice

관련 문제