2012-02-29 4 views
0

사용자가 입력 필드에 입력 할 때 내보기의 일부를 업데이트하고 싶습니다. 처음에 나는보기의 events 필드 내에서 keyup 이벤트 리스너에 결합, 그것은 잘 작동 :Backbone.js :보기에서 맞춤 이벤트를 호출 하시겠습니까?

window.AppView = Backbone.View.extend({ 
el: $("#myapp"), 
events: { 
    "keyup #myInput": "updateSpan", 
}, ... 
updateSpan: function() { 
    this.span.text(this.input.val()); 
}, ... 
}); 

을하지만 그때 나는 keyup 너무 자주 업데이트 것을 깨달았다 앱이 느린했다. 그래서 typeWatch plugin을 사용하기로 결정 했으므로 사용자는 입력을 중지하는 이벤트 만 발생시킵니다. 하지만 이제 Backbone에서 사용자 지정 이벤트 수신기를 설정하는 방법을 알지 못합니다. 현재 나는이 있습니다

window.AppView = Backbone.View.extend({ 
initialize: { 
    var options = { 
     callback: function(){ 
     alert('event fired'); 
     this.updateSpan; 
     }, 
     wait:750 
    } 
    this.input.typeWatch(options); 
}, ... 
updateSpan: function() { 
    this.span.text(this.input.val()); 
}, ... 
}); 

두 질문 :

    내가 경고를 참조
  1. 하지만 updateSpan는 해고되지 않습니다. 콜백에서 this이 잘못 사용 된 것 같습니다. 어떻게해야합니까?
  2. initialize이 typeWatch 이벤트 리스너를 설정하는 데 적합한 장소입니까? 아니면 전에했던 것처럼 events 필드를 계속 사용할 수 있습니까?

답변

1

당신은 실제로 updateSpan를 호출하지 않습니다, 당신은 바로 그 this 늘 올바른 일이 될 것. 이 기본 요소와 render에서의 경우가 아니라면, 보통 내가 initialize이 같은 기능을 첨부 할 두 번째 질문에 대해서는

var v = this; 
    var options = { 
    callback: function() { 
     alert('event fired'); 
     v.updateSpan(); 
    }, 
    wait: 750 
    }; 
    this.input.typeWatch(options); 

: 그것을 해결하는 가장 쉬운 방법은 먼저 다른 변수로보기를 캡처하는 것입니다 , 그래서 나는이 경우 당신이 아마 그것을 올바르게 생각했다고 생각합니다.

관련 문제