2014-11-23 2 views
1

내 문제는 백본 연결 (http://dhruvaray.github.io/backbone-associations)에만 해당됩니다. 중첩 모델에 속성을 설정할 때 속성을 병합 할 수 있는지 궁금합니다.백본 연결을 사용하여 model.set을 사용할 때 특성 병합

// define the Layout model 
var Layout = Backbone.AssociatedModel.extend(); 

// define the User model, with layout as a Related model 
var User = Backbone.AssociatedModel.extend({ 
    relations: [ 
     { 
      type: Backbone.One, 
      key: 'layout', 
      relatedModel: Layout 
     } 
    ], 
    defaults: { 
     layout: {} 
    } 
}); 

// create a new user 
var user = new User({ user_name: 'pascalpp' }); 

// set a property on the layout model 
user.set('layout.foo', 'bar'); 
user.get('layout.foo'); // returns 'bar' 

// call set on the user directly, passing a JSON structure with no foo property 
user.set({ layout: { 'baz': 'bing' } }); 
user.get('layout.foo'); // foo got wiped, so this returns undefined 

내가 직면 해요 실제 시나리오는 우리가 사용자에 대한 부분 데이터를 가져오고 이전에 설정 말소하지 않고 사용자 모델에 그 설정해야한다는 것입니다 '그 돈 속성 : 여기에 문제의 감소이다 현재 가져 오기에 존재하지 않습니다. 따라서 속성을 설정할 때 병합 할 수 있기를 바랍니다. 이것이 가능한가?

답변

2

백본 연결은 새 모델과 기존 모델의 ID가 일치하면 기존 중첩 모델을 업데이트합니다. id가 정의되지 않았거나 일치하지 않으면 중첩 된 모델이 새 모델로 대체됩니다.

이 싱글 톤 중첩 모델에 대해 수행하는 작업은 위조 된 id = 0을 소개 한 다음 예상대로 작동하는 것입니다.

다음은 작동하는 jsfiddle입니다.

근무 코드 :

// define the Layout model 
var Layout = Backbone.AssociatedModel.extend({ 
    defaults: { 
     id: 0  
    } 
}); 

// define the User model, with layout as a Related model 
var User = Backbone.AssociatedModel.extend({ 
    relations: [ 
     { 
      type: Backbone.One, 
      key: 'layout', 
      relatedModel: Layout 
     } 
    ], 
    defaults: { 
     layout: {} 
    } 
}); 

// create a new user 
var user = new User({ user_name: 'pascalpp' }); 

// set a property on the layout model 
user.set('layout.foo', 'bar'); 
user.get('layout.foo'); // returns 'bar' 

// call set on the user directly, passing a JSON structure with no foo property 
user.set({ layout: { id:0, 'baz': 'bing' } }); 
user.get('layout.foo'); // foo got wiped, so this returns undefined 

alert(user.get('layout.foo')) 
+0

아하! 우리는 이미 관련 모델에 id를 할당하고 있습니다.하지만 우리는 프로토 타입에서이를 수행하고 있습니다. 기본값은 아닙니다. id가 인스턴스 자체에 적용되도록 기본값을 사용하도록 코드를 업데이트합니다. 감사! – Pascal

관련 문제