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的原因略有不同。我只是在页面上为他们服务,而不是让主干创建他们。我已经消除了对这一点的咆哮,并留下了答案中其他更适用的部分。我仍然建议永远不要使用该功能