次のコードを使用してビューを作成しています。
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とformタグがテンプレートの一部である場合、フォームをバインドすることもできますが、これはここでやりたいことではありません。
この場合、フォーム送信にバインドするにはどうすればよいですか?
"submit #login-form" : "login"
Backboneは子孫の間でのみこのIDを検索すると思います。したがって、独自のビュー要素と一致することはありません。使ってみませんか:
"submit": "login"
あなたが変化のためにしたように。
念のため、Backboneのコードを確認します。
編集:
セレクターを置くと、バックボーンは
this.$el.on(event, selector, method);
の代わりに
this.$el.on(event, method);
また、jQueryのonメソッドは、代わりに、要素自体を除いて、要素のdescendantsにのみセレクターを適用します。
バックボーンを間違って使用しています。だからあなたがやりたいことは、
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>
属性は、バックボーンビューだけでなく、フォームのテンプレートに関連付けられています。たぶん、フォーム送信イベントにバインドすると、フォームを送信するだけで「送信」イベントが発生します。以下のコードを追加して、もう一度お試しください。
$('#id').submit(function(ev) {
});