2012-02-22 16 views
10

Una característica de mi aplicación Backbone implica asociar modelos de tipo A con modelos de tipo B, lo cual se hace arrastrando la vista A a la vista B. En la clase de vista B, escucho el drop event y de esto obtengo el elemento DOM de la vista A, pero no hay información sobre el modelo A.Usar jQuery UI arrastrar/soltar con backbone.js

¿Cuál es la mejor manera de obtener esta información? Mis mejores conjeturas hasta el momento son

  • tienen el modelo A guardar una referencia a sí mismo en el espacio de nombres de la aplicación, la eliminación de esta referencia en el extremo de arrastre si el manejador de caída no lo ha hecho ya
  • fuego un evento en la vista A , pasando una referencia al modelo B junto con el evento, y luego tener un modelo de llamar a un método del modelo B ...
  • tienda modelo a como un atributo $ .data de vista un

pero todos estos los enfoques parecen intrincados/poco elegantes.

+0

Si puede obtener el elemento DOM, ¿el elemento DOM está asociado al ID del modelo de alguna manera? ¿Te gusta la identificación del elemento o algún campo de datos que configuras? – kinakuta

+0

No. Esta sería una forma bastante buena de hacerlo, pero preferiría no tener que buscar por id cuando el modelo ya está tan estrechamente vinculado con la vista: parece un desperdicio perder de vista el modelo y luego tener que encontrarlo de nuevo. – wheresrhys

+0

Sé lo que quiere decir, pero la interacción entre los dos modelos es algo ilusoria: los modelos son solo representaciones de datos cuando, en realidad, lo que está sucediendo son los eventos DOM que se activan. Obtener los datos del DOM parece un paso necesario ya que los modelos en realidad no están cambiando de ninguna manera. – kinakuta

Respuesta

4

Almacenar como un atributo de datos es realmente bastante limpio, y el rendimiento no será malo. Puede almacenar el atributo cid del modelo como data-cid en DOM el y utilizar el método getByCid de la colección para recuperar el modelo.

0

Creo que la manera más limpia de hacerlo es como se menciona en un comentario de kinakuta para asociar un elemento dom con el modelo que usa la identificación en, por ejemplo, a data-attribute.

Esto tiene sentido desde el punto de vista de la implementación porque le permite tener una dependencia bidireccional y puede hacer referencia fácilmente una a la otra cuando su aplicación se vuelve más compleja.

Sus soluciones mencionadas funcionarían también, sin embargo, creo que la Solución A parece un poco hackosa, la Solución B es menos limpia y la Solución C es esencialmente lo mismo que usar un atributo de datos.

Cuestiones relacionadas