세부 사항을 자세히 설명하려고하지만 누락 된 부분이 있으면 알려주세요.백본에서 '정렬'후 백본에서 '추가'이벤트 발생
백본 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 속성을 추가했습니다. 그 이유는이 문제가 내 문제의 원인 이었기 때문입니다.