javascript - mdn - innerhtml jquery
Backbone.js: ¿Por qué no está vinculado este evento? (2)
Tengo una lista de tareas pendientes, y todo se está procesando como se esperaba, pero cuando hago clic en el botón de enviar en el formulario de edición, el formulario se envía (GET / todo_articulos) y la página se vuelve a cargar y solo muestra el formulario de edición. El evento "enviar formulario" no está limitado y no puedo entender por qué. ¿Qué me estoy perdiendo?
App.Views.Edit = Backbone.View.extend({
events: {
"submit form": "save"
},
initialize: function(){
this.render();
},
save: function(){
var self = this;
var msg = this.model.isNew() ? ''Successfully created!'' : ''Saved!'';
this.model.save({
title: this.$(''[name=title]'').val(),
success: function(model, resp){
console.log(''good'');
new App.Views.Notice({message: msg});
self.model = model;
self.render();
self.delegateEvents();
Backbone.history.saveLocation(''todo_items/''+ model.id);
$(''#edit_area'').html('''');
},
error: function(){
console.log(''bad'');
new App.Views.Error();
}
});
return false;
},
render: function(){
$(''#edit_area'').html(ich.edit_form(this.model.toJSON()));
}
});
Aquí está el formulario de edición:
<script id="edit_form" type="text/html">
<form>
<label for="title">Title:</label>
<input name="title" type="text" value="{{title}}" />
<button>Save</button>
</form>
</script>
Backbone usa delegateEvents en el elemento el. Si no especifica "el" o no usa "el" para representar su vista, la delegación del evento no funcionará. En lugar de hacer
$("#edit_area")
dentro de tu render, pásalo como la opción "el" en el constructor:
edit = new App.Views.Edit({el: $("#edit_area")})
Véalo como this.el en todas partes en su código de vista, especialmente en su procesamiento.
Después de muchas horas de monkeying con esto, funcionó después de que explícitamente establecí el
en la vista, y usé $(this.el)
en la función de render
. Extraño.