Mi pregunta se refiere a esta muestra de IU.Enfoque Backbone.js para administrar las selecciones de estado/manejo de UI en la IU
Tiene problemas con el enfoque de la gestión del estado "seleccionado" de varios componentes de vista de interfaz de usuario. Por ejemplo, tengo menús arriba, desde los cuales el usuario hace varias selecciones. Estas selecciones deberían causar actualizaciones en los menús (elementos HL seleccionados) y también provocar actualizaciones en los resultados, que se basarían en las selecciones realizadas. Además, los menús tienen diferentes tipos de reglas. Por ejemplo, solo puede tener una "lista" seleccionada a la vez, pero puede tener varias "etiquetas" seleccionadas.
Un enfoque en el que estaba pensando era crear un modelo de Backbone que tenga el estado de la "selección" de UI. Por ejemplo, podría tener un modelo SearchCriteria que contenga esta información. Entonces, cuando un usuario hace elecciones en la interfaz de usuario, podría actualizar este modelo. Podría hacer que los diversos componentes de vista escuchen los cambios en este modelo (así como los cambios en los modelos de datos primarios). Luego, las vistas actualizarían su estado visual al actualizar qué elementos se muestran como seleccionados.
Un elemento con el que estoy luchando en este enfoque es quién debería ser responsable de actualizar el estado seleccionado de un artículo. Por ejemplo, en la lista de etiquetas, que podría tener las siguientes piezas definidas ...
- Tag (modelo para representar una etiqueta)
- TagCollection (colección para representar una colección de etiquetas)
- TagMenuView (vista que representa el menú de etiquetas disponibles para seleccionar)
- TagMenuItemView (vista que representa un solo elemento en el menú)
¿Debo ...
- Configure un detector de eventos en TagMenuItemView para hacer clic, y luego intente manejar 1) actualizar el modelo de SearchCriteria, y 2) actualizar el estado visual del menú, p. artículos seleccionados?
- ¿O debería tener la vista de nivel superior (el TagMenuView) para detectar eventos como que el usuario seleccione una etiqueta y realizar el trabajo allí?
- Además, el menú de etiquetas en este ejemplo permite que se seleccionen varios elementos, pero el menú de listas solo permite seleccionar una lista a la vez. ¿Dónde se aplicaría esta regla de "IU" (¿o se trata realmente de una regla de negocios relacionada con una búsqueda?). Por ejemplo, si escuché eventos de clics en cada elemento de menú de la lista individual, ciertamente podría actualizar el estado visual de ese elemento, pero también debo asegurarme de que la vista de menú de nivel superior deseleccione cualquier otra lista seleccionada. Entonces, ¿sería mejor administrar el estado "UI" de algo así como el menú de la lista de tareas en la vista que representaría ese menú completo (un ToDoListMenuView) en lugar de en cada vista de elemento de menú individual?
Lo siento por tantas preguntas. Solo me está costando pasar a este modelo de desarrollo.
Gracias Elf. Escuchar cómo alguien más piensa sobre estas cosas me está ayudando a manejar esto. Creé un modelo de SearchCriteria y, como describes, mis vistas escuchan los cambios. Lo bueno es que simplemente tengo que actualizar los criterios y las vistas se actualizan correctamente. Terminé almacenando una instancia de los criterios en mi vista de aplicación de nivel más alto, y luego la paso a las vistas secundarias cuando se inicializan. Elegí pasarlo por separado, en lugar de como el "modelo" predeterminado, ya que algunas de mis otras vistas deben usar modelos para elementos de datos puros, como etiquetas, listas de tareas, etc. – Kevin