Backbone.js:在View中调用自定义事件?

时间:2012-02-29 12:12:00

标签: javascript jquery backbone.js

当用户输入输入字段时,我想更新部分视图。最初,我绑定到View的keyup字段中的events事件侦听器,并且运行良好:

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 个答案:

答案 0 :(得分:1)

你实际上并没有打电话给updateSpan,你是对的,this不是正确的事。最简单的解决方法是首先将视图捕获到另一个变量中:

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

至于你的第二个问题,通常我会在initialize中添加这样的功能(如果它在基本元素上)和render如果它不是,所以我认为在这种情况下,你可能做对了。