2012-06-29 3 views
1

포커스를 잃거나 사용자가 Enter 키를 누르면 텍스트 필드의 값이 모델에 저장되는 ToDo 목록을 시뮬레이트하고 있습니다.backbone.js에서 두 이벤트 중 하나만 트리거합니다.

//view etc. 
events:{ 
    "blur .task": "doneEditing", 
    "keypress .task": "doneEditing" 
}, 
doneEditing: function(e){ 
    if(e.which && e.which != 13) return; 
    e.preventDefault(); 
    //model saving code 
} 

문제는 키 누름이 doneEditing를 트리거 입력 한 후 흐림이 발생하고 다시 doneEditing을 유발한다는 것이다. 해결 방법을 찾기 위해 약간의 트릭을 사용할 수는 있지만, 백본에 이벤트 중 하나만 트리거하는 방법이 있는지 궁금합니다.

감사합니다.

답변

2

, 당신은 단지 throttle -method 짧은 연속으로 너무 많은 통화를 중지 underscore.js 라이브러리를 사용할 수 있습니다. 다음은 documentation에 대한 링크입니다.

그리고 예 :

doneEditing: _.throttle(function(e) { 
    // Copy your event handling here 
}, 100), // The number here defines the time threshold within which the function can be called only once 

희망이 도움이!

+0

그건 좀 해킹 것 같습니다. 그러나 더 나은 솔루션이 나올 때까지 사용하겠습니다. 감사! – chenglou

0

e.stopPropagation()을 사용하거나 false (단지 jQuery에서 preventDefaultstopPropagation)을 호출하십시오. DOM 이벤트 전파는 Backbone의 범위를 벗어나므로 이러한 간단한 작업에는 도우미가 필요하지 않습니다. 이 두 이벤트가 짧은 시간 간격으로 발생하는 경우 (당신이 어쨌든있을 것이다, 그래서 백본의 하드 의존성)

+0

감사하지만 내 경우에는 작동하지 않습니다. 어쩌면 stopPropagation이 어떻게 작동하는지 오해했을 지 모르지만, ** 동일한 ** 요소에서 동일한 이벤트를 두 번 트리거하는 것을 중단한다고 생각하지 않습니다. – chenglou

관련 문제