Backbone.js:为什么不绑定此事件?

Mat*_*rby 22 javascript backbone.js

我有一个简单的待办事项列表,所有都按预期呈现,但是当我点击编辑表单中的提交按钮时,表单被提交(GET/todo_items),页面被重新加载,只显示编辑表单."提交表单"事件没有受到约束,我无法弄清楚原因.我错过了什么?

App.Views.Edit = Backbone.View.extend({
  events: {
    "submit form": "save"
  },
  initialize: function(){
    this.render();
  },
  save: function(){
    var self = this;
    var msg  = this.model.isNew() ? 'Successfully created!' : 'Saved!';

    this.model.save({
      title: this.$('[name=title]').val(),

      success: function(model, resp){
        console.log('good');
        new App.Views.Notice({message: msg});
        self.model = model;
        self.render();
        self.delegateEvents();
        Backbone.history.saveLocation('todo_items/'+ model.id);
        $('#edit_area').html('');
      },
      error: function(){
        console.log('bad');
        new App.Views.Error();
      }
    });

    return false;
  },
  render: function(){
    $('#edit_area').html(ich.edit_form(this.model.toJSON()));
  }
});
Run Code Online (Sandbox Code Playgroud)

这是编辑表格:

<script id="edit_form" type="text/html">
  <form>
    <label for="title">Title:</label>
    <input name="title" type="text" value="{{title}}" />
    <button>Save</button>
  </form>
</script>
Run Code Online (Sandbox Code Playgroud)

Jul*_*ien 25

Backbone在el元素上使用delegateEvents.如果您未指定"el"或不使用"el"呈现视图,则事件委派将不起作用.而不是做

$("#edit_area") 
Run Code Online (Sandbox Code Playgroud)

在渲染中,将其作为构造函数中的"el"选项传递:

edit = new App.Views.Edit({el: $("#edit_area")})
Run Code Online (Sandbox Code Playgroud)

在视图代码中的任何地方都将它称为this.el,尤其是在渲染中.