Backbone.js 如何让主干将提交事件绑定到表单?
我正在使用以下代码创建视图:Backbone.js 如何让主干将提交事件绑定到表单?,backbone.js,backbone-views,backbone-events,Backbone.js,Backbone Views,Backbone Events,我正在使用以下代码创建视图: LoginForm = Backbone.View.extend({ tagName :"form" ,id : "login-form" ,className :"navbar-form" ,initialize: function () { this.model = new StackMob.User(); this.render(); } ,render: fun
LoginForm = Backbone.View.extend({
tagName :"form"
,id : "login-form"
,className :"navbar-form"
,initialize: function () {
this.model = new StackMob.User();
this.render();
}
,render: function () {
$(this.el).html(this.template());
return this;
}
,events : {
"change" : "change"
,"submit #login-form" : "login"
}
,login : function( event) {
event.preventDefault();
var self = this;
this.model.login(true, {
success: function( model) {
app.alertSuccess( "User logged in");
self.render();
}
,error: function( model, response) {
app.alertError("Could not login user: " + response.error_description);
}
});
event.currentTarget.checkValidity();
return false;
}
// rest of code
以及模板:
<input name="username" class="span2" type="email" placeholder="Email" required >
<input name="password" class="span2" type="password" placeholder="Password" required >
<button id="login-button" type="submit" class="btn">Sign in</button>
登录
当我在按钮上绑定时,将调用login函数。绑定表单提交事件时,不会调用登录函数。如果id&form标记是模板的一部分,我还可以获得要绑定的表单,这不是我在这里要做的
在这种情况下,我如何在提交的表格上绑定
"submit #login-form" : "login"
我认为主干将只在后代中搜索此id。所以它永远不会匹配您自己的视图元素。为什么不直接使用:
"submit": "login"
就像你为改变所做的那样。我会检查主干网的代码以确定 编辑:
如果放置选择器,主干将调用
this.$el.on(event, selector, method);
而不是
this.$el.on(event, method);
jQuery的on方法将只对元素的子体应用选择器,而不包括元素本身。您使用的主干是错误的。所以你要做的是
template: my_template_string,
render: function () {
this.el.innerHTML = this.template();
},
events: {
"submit #login-form": function (event) {}
}
其中此.template
设置为
<form id="login-form" class="navbar-form">
<input name="username" class="span2" type="email" placeholder="Email" required >
<input name="password" class="span2" type="password" placeholder="Password" required >
<button id="login-button" type="submit" class="btn">Sign in</button>
</form>
登录
这不是唯一有意义的吗?为什么要将id和classname与输入元素分开?顺便说一句,你仍然可以在submit
上进行裸体catchall,但只有在我的方法中
类和
属性必须绑定到表单的模板,而不仅仅是主干视图- 您是否会明确捕获正确的提交
- 您是否支持多个提交事件(如果一个模板有两个表单)
$('#id').submit(function(ev) {
});
相关文档隐藏在文档中:“省略
选择器
会导致事件绑定到视图的根元素(this.el)
”不幸的是,这并不排除他正在做的事情。好吧,我想这还是足够的信息。我希望每个人都会,因为这是瓦萨克的建议。你们在谈论“僵尸观点”的问题吗?id/tagName与这个问题毫无关系。@suish是的,我同意我不使用tagName和className,id的原因略有不同。我只是在页面上为他们服务,而不是让主干创建他们。我已经消除了对这一点的咆哮,并留下了答案中其他更适用的部分。我仍然建议永远不要使用该功能