Pregunta

Estoy jugando con una vista y un modelo relacionado que se ve así:

App.Views.Addresses         = App.Views.Addresses || {};
App.Views.Addresses.Address = Backbone.View.extend({

  events: {
    "click button#foo"             : "clear"
  },

  initialize: function(model){
                this.address = model.model;
                this.address.view = this;
                _.extend(this, Backbone.Events);
                this.render();
              },

  render:     function(){
                ... rendering stuff
              },

  clear:      function(){
                this.address.clear();
              }
});

y

var Address = Backbone.Model.extend({

  url:   function() {
           ... url stuff
         },

  clear: function(){
           this.destroy();
           this.view.remove();
         }
});

Estoy enfrentando dos problemas aquí. El primero:

Tengo un botón con id = "foo" en mi fuente y me gustaría que la vista vea el evento 'Haga clic' de este mismo botón y dispare el evento 'Clear'. Problema: esto no funciona.

De todos modos, llamar a 'Borrar' en mi modelo a mano elimina limpiamente los datos en el servidor pero no elimina la vista en sí. Ese es el segundo problema. Ojalá alguien con más experiencia pueda iluminarme.

Gracias por adelantado Felix

¿Fue útil?

Solución

Primer problema:

  • Su botón debe estar dentro del elemento presentado por la vista.
    • Eventos de alcance de la red troncal solo a elementos internos
  • Debe representar su punto de vista dentro de este elemento.
    • columna vertebral Use ese elemento para la delegación

Segundo problema:

  • Usa eventos para destruir tu punto de vista
    • No debe almacenar la vista en el modelo. Esto es una especie de "no no" en MVC. Su modelo ya emite un evento de "eliminar" cuando se elimina. Su punto de vista debe escucharlo y comportarse en consecuencia.
  • Debe eliminar su elemento de vista del DOM usted mismo
    • Esto no es manejado por la columna vertebral.

Otros comentarios generales:

  • Las vistas ya están extendiendo la columna vertebral.
  • Use esto. Modelo en lugar de esto.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top