Backbone View事件无效

时间:2015-08-01 11:26:40

标签: javascript backbone.js

我创建了一个简单的主干页面,它从服务器获取一些设置(JSON)并将它们插入表中(每行都是settingModel个实例)。

现在我想用事件来改变我的模特'属性,当用户更改它们并与服务器同步设置时。

我在模型的视图中使用了以下代码:

app.settingView = Backbone.View.extend ({  // View for Model

  tagName: 'tr',

  template: _.template( $('#setting-template').html() ),

  events: {
    'focus input':'showAlert'
  },

  render: function () {
    var modelData = this.model.toJSON();
    var settingTemplate = this.template(modelData);
    this.$el.html(settingTemplate);
    return this;
  },

  showAlert: function(){
    alert("You Are Editing");
  }
});

但它不会触发事件,当我在onfocus="alert()"标记中使用内联input时,同样的事件也会起作用。

我创建了一个小提琴 here

1 个答案:

答案 0 :(得分:1)

那是因为这里:

$('.container').html($(settingsView.render().el).html());

您正在使用View的元素的HTML内容。您应该附加View的元素本身。

$('.container').append(settingsView.render().el);

这是因为Backbone使用事件委托语法来绑定视图事件处理程序。由于您要附加View的内容的html表示,因此附加的元素不是View元素的后代,因此事件不会传播到View的元素。 / p>