저는 "todo 앱"백본 클라이언트 측에서 작업 중입니다. TodoView에서 삭제 요청을하면 색인 페이지 (전체 목록 표시)로 리디렉션됩니다. 문제는 리디렉션 후에도 삭제 된 할일이 여전히 목록에 있다는 것입니다. 그러나 새로 고침 후 사라집니다.
할 일 목록이 DELETE 요청이 수행되는 것보다 빠르게 렌더링 되기 때문 입니까?
todoView에서 '삭제'버튼을 듣습니다.
events: {
'click .red-button' : 'delete',
},
delete: function() {
this.model.destroy({
success: function(model, res) {
$('.body-container').empty();
//redirecting to the index page--the todo list
navigate(''); //equals to Backbone.Router.prototype.navigate(url, {trigger: true})
}
})
},
할 일 모델에 대한 동기화를 무시했습니다. '삭제'방법은 다음과 같습니다.
case 'delete':
request
.del(this.url())
.end(function(res) {
console.log('deleting......');
});
options.success();
break;
첫째, success
콜백을 사용하지 마십시오 ! 매우 나쁜 습관 / 미래를 위해 들어가는 것은 나쁜 습관입니다 ( "이유"는 아래 참조). 백본은 destroy
이벤트 가 발생할 때까지 "완료"되지 않습니다 . 따라서 모델의 destroy 이벤트를 들어보십시오. 클리너가 더 쉽습니다 :)
delete: function(){
this.model.destroy();
//Ideally put this in your ROUTER
this.listenTo(this.model, 'destroy', function(){
navigate();
}
}
그러나 당신은 거기에서 끝나지 않았습니다. 가장 가능성이 높은 문제는 인덱스 페이지에있는 목록보기가 모델의 destroy
이벤트를 수신하지 않는다는 것 입니다. ItemViews (개별보기)를 사용했다고 가정하면
var TodoView = Backbone.View.extend({
initialize: function(){
this.listenTo(this.model, 'destroy', this.remove);
}
});
그러면 표면 문제가 해결됩니다.
그러나이 경우 더 큰 근본적인 문제가 있습니다. 인덱스 페이지의 ToDoList보기가 다른 곳으로 이동할 때 제대로 제거되지 않습니다. 이로 인해 많은 문제가 발생합니다 (특히 애플리케이션이 커지면). 탐색 이벤트가 발생할 때마다 모든보기가 remove()
페이지에서 d 인지 확인 하십시오. 매우 중요!!!
"인덱스 페이지"에 대한 코드를 게시하면 추가 진단을 도와 드릴 수 있습니다.
success
콜백을 사용하는 것이 잘못된 이유 (초안 1)
백본에서 "실제"응용 프로그램을 빌드하기 시작하면 일반적으로 많은 뷰, 모델 및 다양한 개체가 모델이 파괴되도록 "듣고"있을 것입니다. 이 모델을 듣고있는 5 ~ 10 개의 서로 다른 뷰가있을 수 있습니다 (사실 제가 작성한 거의 모든 엔터프라이즈 앱에서이 상황을 겪었습니다). success
콜백 을 사용하면 발생하는 이벤트 체인을 추적하는 것이 매우 혼란스러워집니다. 작업 (예 : 멀리 탐색)이 발생하면 먼저보고 싶은 곳이 라우터입니다. 그렇지 않으면, 네비게이터를 실행시키는 50-100 개의 다른 "액션"이 있다고 상상해보세요. 그리고 그것들은 모두 success
다른 모델 의 콜백 에서 일어나고 특정 네비게이션이 발생한 이유를 추적하는 데 며칠이 걸립니다.listenTo
다른 개체를 중앙 집중화했습니다. 나중에 좀 더 자세히 설명하겠습니다 (혼란스러워 보인다). 그러나 이것에 대해 저를 믿으십시오 success
..
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다