我正在尝试使用Backbone实现一个简单的登录表单,使用骨干表单库。
$(function() {
var LoginUser = Backbone.Model.extend({
schema: {
username: { type: 'Text' },
password: { type: 'Text' }
},
url: 'login_backbone_form'
});
var thisLogin = new LoginUser();
var form = new Backbone.Form({
model: thisLogin,
events: {
"click button#formButton" : "saveForm"
},
saveForm: function() {
alert('hit saveForm');
this.model.save();
}
}).render();
window.form = form;
$('#formHook').html(form.el);
$('<button type="button" name="login" id="formButton">Login</button>')
.appendTo('#formHook');
});
我的HTML有一个id ='formHook'的div,页面显示一个带有Login按钮的表单。但按下按钮什么都不做。
我在这里做错了什么?
答案 0 :(得分:4)
第一个问题可能是您的表单按钮位于表单视图的上下文之外。将DOM事件处理程序附加到视图时,它们只会响应该视图中的元素。尝试在主视图中嵌入表单和按钮。
这是代码,它也在JSFiddle中: http://jsfiddle.net/evilcelery/hsSru/
$(function() {
var LoginUser = Backbone.Model.extend({
schema: {
username: {
type: 'Text'
},
password: {
type: 'Text'
}
},
url: 'login_backbone_form'
});
var LoginView = Backbone.View.extend({
events: {
"click button#formButton": "saveForm"
},
initialize: function() {
this.model = new LoginUser();
},
render: function() {
var $button = $('<button type="button" name="login" id="formButton">Login</button>');
this.form = new Backbone.Form({ model: this.model });
this.$el.append(this.form.render().el);
this.$el.append($button);
return this;
},
saveForm: function() {
this.form.commit();
this.model.save();
alert('hit saveForm');
console.log(this.model.toJSON());
}
});
window.loginView = new LoginView;
$('#formHook').html(loginView.render().el);
});