2013-07-08 7 views
0

백본에서 모델 변경. 일반적으로 model.set 또는 model.unset을 사용하여 일부 모델 값을 변경합니다. 그리고 UI (바인드 됨)에 정상적으로 표시됩니다. 나는 다르게 지금 뭔가를했을백본. 다른 모델 변경

는 참조 모델을 변경합니다. 내가 볼 수있는 한 정상적으로 작동하지만, 백본에 대해서는 괜찮은지 궁금합니다. 내가 모델에 정렬하고있는 중이 야

는 (UI가 바인더 제본되지 않도록, UI 변경에 따라), 나는 참고로 그 일을하고있다. 따라서 백본에서 제공하는 세트를 사용하지 않습니다. 한마디로

var source = this.model.get('mymodel'), 
      temp = source[startMove];    
      temp.age= endMove; 

      if (startMove <= endMove) { 
       for (var i = 1; i < endMove; i++) { 
        if (i >= startMove) { 
         source[i] = source[i + 1]; 
         source[i].age--; 
        } 
       } 

       // Rest of the code 

차라리 set 명령을 사용하여 모델을하지만, 소스 값을하지 조작 :

이 내가 할 것입니다.

의견이 있으십니까?

+0

나는 이것에 문제가없는 것 같습니다. 그게 무슨 문제 야? – Adam

+0

예상대로 작동합니다. 내가 모르고있는 잠재적 인 문제가 있을지 궁금하다. – Emilly

답변

1

당신은 늘 당신의 change:* 이벤트가 트리거 얻을 및 모델 습관의 검증 방법에 대해 확인합니다. 이 예를 생각해

var model = new Backbone.Model(); 
var o = {}; 
model.set('o', o); 
o.hello = 1; 

model.get('o').hello; // 1; 

On the other hand when getting from a backbone model you will get the value stored in `model.attributes[attr]`. So actually you can also set like in your example: 

var local_o = model.get('o'); 

local_o.hello = 2; 

model.get('o').hello; // 2; 

항상 내 모델의 유효성을 검사 할 수 있습니다 내 모든 변경 이벤트가 트리거됩니다 .set을 사용하는 경우를; 또한 _.clone을 사용하여 물체를 얕은 닫을 수 있습니다.

var local_o = _.clone(model.get('o')); 

local_o.hello = 3; 

model.get('o').hello; // 2 
+0

궁금해서, 나는 많은 분류를하고있다. 아마도 많은 속성을 가진 많은 모델로 끝날 것입니다. 나는이 단계에서 사건과 검증에 관심이 없다. 나에게는 아무 것도 없기 때문에. 속도면에서 이점이 있습니까? – Emilly