我怎么骨干绑定提交事件的形式?(How do I get backbone to bind the

2019-08-18 03:09发布

我使用下面的代码来创建视图:

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>

当我绑定按钮,登录函数被调用。 绑定的形式提交事件,登录功能不会被调用。 我还可以获取表单绑定如果ID和表单标签是模板,这是不是我想要在这里做的一部分。

如何绑定的形式在这种情况下提交?

Answer 1:

"submit #login-form" : "login"

我想骨干将搜索只后代中此ID。 所以它永远不会匹配自己的视图元素。 你为什么不只是使用:

"submit": "login"

当你做了改变。
要检查骨干的代码只是要确定。

编辑:
如果你把一个选择,骨干会调用

this.$el.on(event, selector, method);

代替

this.$el.on(event, method);

和jQuery的方法上会选择,而不是只适用于该元素的后代 ,但不包括元素本身。



Answer 2:

您使用的骨干错误。 所以,你要想做的事,

template: my_template_string,
render: function () {
    this.el.innerHTML = this.template();
},
events: {
    "submit #login-form": function (event) {}
}

this.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和类名从输入元素分开吗? 顺便说一句,你仍然可以做裸包罗万象submit ,但只是在我的方法,

  • <form>类,和<form>属性绑定到窗体的模板,而不仅仅是骨干视图,
  • 你会明确地捕捉提交的权利,
  • 你所能支持多个提交事件(事件一个模板有两种形式)。


Answer 3:

也许当您绑定的形式提交事件,它只是提交表单将触发“提交”事件。 您可以添加以下代码,并再次尝试。

$('#id').submit(function(ev) {

});


文章来源: How do I get backbone to bind the submit event to a form?