我有一个简单的待办事项列表,并且所有内容都按预期呈现,但是当我点击编辑表单中的提交按钮时,表单被提交(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()));
}
});
以下是编辑表格:
<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>
答案 0 :(得分:25)
Backbone在el元素上使用delegateEvents。如果您未指定“el”或不使用“el”呈现视图,则事件委派将不起作用。而不是做
$("#edit_area")
在渲染中,将其作为构造函数中的“el”选项传递:
edit = new App.Views.Edit({el: $("#edit_area")})
在视图代码中的任何地方都将其称为this.el,尤其是在渲染中。
答案 1 :(得分:0)
经过几个小时的修改后,它在我在视图中明确设置el
并在$(this.el)
函数中使用render
之后就有效了。怪异。