backbone.js - traductor - backbone vs react
¿Cómo obtengo el backbone para vincular el evento submit a un formulario? (3)
Estás utilizando Backbone mal. Entonces, ¿qué vas a querer hacer?
template: my_template_string,
render: function () {
this.el.innerHTML = this.template();
},
events: {
"submit #login-form": function (event) {}
}
Donde this.template
está configurado para
<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>
¿Y eso no solo tiene sentido? ¿Por qué querrías que la identificación y el nombre de clase se separaran de los elementos de entrada? Por cierto, todavía puedes hacer el capote desnudo en el submit
, pero solo en mi método,
- los atributos
<form>
class y<form>
se vinculan a la plantilla del formulario, y no solo a la vista de la red troncal, - ¿Capturará explícitamente el envío correcto,
- ¿alguna vez puede soportar múltiples eventos de envío (en caso de que una plantilla tenga dos formas).
Estoy usando el siguiente código para crear la vista:
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
Y la plantilla:
<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>
Cuando me enlace en el botón, se llama a la función de inicio de sesión. Enlazando en el evento de envío de formulario, la función de inicio de sesión no se llama. También puedo obtener el formulario para enlazar si el ID y la etiqueta del formulario son parte de la plantilla, que no es lo que quiero hacer aquí.
¿Cómo puedo vincular el formulario enviado en este caso?
Tal vez Cuando se enlace en el evento de envío de formulario, solo se envíe, el formulario activará el evento ''enviar''. podrías agregar el código a continuación e intentarlo de nuevo.
$(''#id'').submit(function(ev) {
});
"submit #login-form" : "login"
Creo que Backbone buscará esta identificación solo entre los descendientes. Por lo tanto, nunca coincidirá con su propio elemento de vista. ¿Por qué no solo usas:
"submit": "login"
Como lo hiciste para el cambio.
Voy a verificar el código de Backbone solo para estar seguro.
Editar:
Si pone un selector, Backbone llamará
this.$el.on(event, selector, method);
en lugar de
this.$el.on(event, method);
Y el método on de jQuery aplicará el selector a los descendientes solo del elemento, excluyendo el elemento en sí.