2013-02-27 2 views
1

세부 사항을 자세히 설명하려고하지만 누락 된 부분이 있으면 알려주세요.백본에서 '정렬'후 백본에서 '추가'이벤트 발생

백본 0.9.10, 백본 관계형 0.7.1, 밑줄 1.4.4를 사용하고 있습니다.

내가 설정과 같은 백본 관계형 수집했습니다 : 동적으로 전달 된 컬렉션에 수신기를 부착 백본보기 만들어 .. 그리고

// ActorAssignmentCollection.js 
Backbone.Collection.extend({ 
    model: AbstractActorAssignment, 
    comparator: function (assignment) { 
     return assignment.get('sort_index'); 
    } 
}); 

: 이제

// ActorDisplay.js 
Backbone.View.extend({ 

    attachListeners: function (collection) { 
     this.listenTo(collection, 'add', _.bind(this.onAdd, this)); 
     this.listenTo(collection, 'sort', _.bind(this.onCollectionSort, this)); 
    }, 

    onAdd: function() { 
     console.log('onAdd fired'); 
    }, 

    onCollectionSort: function() { 
     console.log('onCollectionSortFired'); 
    } 
}); 

는, 여기에 온다 좋은 부분 :

관계형의 .findOrCreate 메서드를 사용하여 새 ActorAssignment 모델을 만듭니다.

// AddAssignmentCommand: 
execute: function (data) { 
    var sortIndex = data.collection.length, 
     actorAssignment = data.collection.model.findOrCreate({ 
      actor: data.actor, 
      sort_index: sortIndex, 
      process_model: data.processModel 
     }); 

    data.collection.add(actorAssignment); 
}  

백본 0.9.2에서는 '정렬'이벤트가 '추가'이벤트 후에 항상 발생했지만 더 이상 발생하지 않았습니다. 나는 이것을 디버깅하는 데 시간을 보냈으며 여기에 내 결과가있다. 컬렉션에 모델에 '추가'전파가 지연되는 반면 컬렉션에서 '정렬'이 직접 트리거되어 내 응용 프로그램에서 이상한 동작이 발생하는 것 같다. . '종류'이벤트가있는 동안, 당신이 볼 수 있듯이

triggering add events.. 6dd47c9_backbone_1.js:641 
triggering add event on model 6dd47c9_backbone_1.js:644 
trigger: add fired 6dd47c9_backbone_1.js:182 
triggering sort events.. 6dd47c9_backbone_1.js:647 
trigger: sort fired 6dd47c9_backbone_1.js:182 
*onCollectionSortFired* ControlStructureActorDisplay.js:136 
trigger: relational:add fired 6dd47c9_backbone_1.js:182 
trigger: change:entity_type fired 6dd47c9_backbone_1.js:182 
trigger: change:entity_type fired 6dd47c9_backbone_1.js:182 
trigger: change:entity_type fired 6dd47c9_backbone_1.js:182 
trigger: change:entity_type fired 6dd47c9_backbone_1.js:182 
trigger: change:actor fired 6dd47c9_backbone_1.js:182 
trigger: change:actor fired 6dd47c9_backbone_1.js:182 
trigger: change:actor fired 6dd47c9_backbone_1.js:182 
trigger: change:actor fired 6dd47c9_backbone_1.js:182 
trigger: change:process_step fired 6dd47c9_backbone_1.js:182 
trigger: change:process_step fired 6dd47c9_backbone_1.js:182 
trigger: change:process_step fired 6dd47c9_backbone_1.js:182 
trigger: change:process_step fired 6dd47c9_backbone_1.js:182 
trigger: change:sort_index fired 6dd47c9_backbone_1.js:182 
trigger: change:sort_index fired 6dd47c9_backbone_1.js:182 
trigger: change:sort_index fired 6dd47c9_backbone_1.js:182 
trigger: change:sort_index fired 6dd47c9_backbone_1.js:182 
trigger: change fired 6dd47c9_backbone_1.js:182 
trigger: change fired 6dd47c9_backbone_1.js:182 
trigger: change fired 6dd47c9_backbone_1.js:182 
trigger: change fired 6dd47c9_backbone_1.js:182 
trigger: add fired 6dd47c9_backbone_1.js:182 
trigger: add fired 6dd47c9_backbone_1.js:182 
trigger: add:actor_assignments fired 6dd47c9_backbone_1.js:182 
trigger: add:actor_assignments fired 6dd47c9_backbone_1.js:182 
trigger: add fired 6dd47c9_backbone_1.js:182 
*onAdd fired* ControlStructureActorDisplay.js:155 

가의에서 onAdd가 onCollectionSort 후 길을 해고 :

이 출력 내가 백본 소스 코드 디버깅 문을 넣었습니다

입니다 백본 콜렉션의 'add'이벤트 이후에 트리거됩니다. 644 행에 추가하십시오. 의도 한 것입니까? 아니면 버그입니까? 또한 이것이 특정 관계형 문제인지 아니면 백본 자체의 문제인지는 알 수 없습니다. 마지막으로 내 질문이 제기됩니다 : 위의 예제처럼 이벤트가 차단되지 않거나 이벤트가 특정 순서로 실행되었다고 가정 할 때 좀 더 신중해야합니까?

EDIT : findOrCreate 호출에 process_model 속성을 추가했습니다. 그 이유는이 문제가 내 문제의 원인 이었기 때문입니다.

답변

1

발견! 분명히 다른 모델과 관계가있는 컬렉션 모델에서 findOrCreate를 호출하면 backbone.relational가 관계를 자동으로 확인하고 processModel에있는 내 oneToMany의 역관계 컬렉션에 추가합니다. 그러면 실제로 모델을 추가하기 전에 추가를 트리거합니다. 컬렉션에. 이 문제에 부딪히는 다른 사람들에게 이것이 의미가 있기를 바랍니다.