2012-08-23 2 views
2

Backbone 관계형을 Backbone.js의 매우 유용한 확장으로 사용하고 있습니다.백본 관계 저장 화재 : 모델이 이미있는 경우에도 <key>이 표시됩니다.

그러나 1-M 관계로 백본 관계형 모델을 저장 한 후에 문제가 있습니다.

내가보고있는 문제는 model.save() 이후 add :가 컬렉션의 모든 관련 모델에 대해 다시 한 번 발생한다는 것입니다. 모델이 마스터 뷰에서 두 번째 렌더링 될 때 내보기에 문제가 발생합니다. 새로운 관련 모델을 추가 할 때이 첫 번째로드에서 잘 작동하고

//master view 
initialize: function(){ 
    _.bindAll(this, 'render', 'renderRelated'); 
    this.model.bind('change', this.render); 
    this.model.bind('add:related', this.renderRelated); 
} 

다음과 같이

은 내 마스터 뷰가 설정되어 있습니다. 문제는 부모 모델에서 저장을 호출 할 때 모델에 ID가있는 경우에도 add:related이 모든 중첩 모델에 대해 다시 실행된다는 것입니다. 저장시 관련 컬렉션이 완전히 채워진 것처럼 보입니다.

다른 사람들이이 문제를 어떻게 해결했는지 궁금합니다. 나는 생각했다 :

  1. 각 관련 모델
  2. 바인드 RM에 중첩 된 뷰를 부착 : 마스터 뷰이 나에게 꽤 해키 보인다

에서보기를 제거하는 방법에 관한, 매우 비효율적이며 하위보기가 제거되고 다시 추가 될 때 최종 사용자에게 깜박임 효과가 발생합니다.

나는 또한 reset:related에 바인딩하려고했지만 저장 후 실행되지 않는 것 같습니다.

+0

Conor, 나는 이것이 오래된 것을 알고 있지만이 문제에 대한 해결책을 찾아 냈습니까? 나는 Tony의 대답이 내 경우에 도움이되지 않았던 동일한 일을 경험하고있다. – HawkeyeFan

+0

코드를 살펴보면 우리가 일을 끝내는 방식은 this.model.bind ('sync', this.render)를 동기화하기 위해 바인딩하고 add : related를 사용하지 않고 addRelated, renderRelated 우리가 필요할 때 작업을 수행 한 메소드. 기본적으로 수동으로했기 때문에 add :에 의존 할 수 없습니다. 따라서 부모 render() 메소드에서 우리는 각각의 관련 객체를 루프 처리하고 renderRelated() 메소드를 통해 렌더링합니다. 희망이 도움이됩니다. –

답변

0

Backbone.Marionette보기를 사용하며 비슷한 문제가 있습니다. 이 (테스트되지 않은)로 변환

initialize: function(){ 
    this.bindTo(this.model, 'change', this.render); 
    this.bindTo(this.model.get('myrelated'), 'relational:add', this.render); 
} 

나는 일반 백본 생각 : 당신이 저장할 때 {wait: true}을 통과하는 경우 다음 relational:add 해고 될 것이라고

initialize: function(){ 
    _.bindAll(this, 'render', 'renderRelated'); 
    this.model.bind('change', this.render); 
    this.model.get('myrelated').bind('relational:add', this.render); 
} 

참고이 그것을 해결하는 방법입니다 두 번 : 임시 모델이 저장 전에 백본에 의해 만들어지면 한 번, 저장이 성공하고 실제 모델이 만들어지면 한 번. 아직 해결되지 않은 bug with Relational입니다.