2012-02-08 19 views
34

Soy nuevo en Backbone.js. He revisado la documentación. Mi pregunta es ¿de dónde viene el concepto del controlador? En otras palabras, ¿qué es un controlador en Backbone.js?Controlador en Backbone.js

Escuché que el enrutador es el controlador. Si es así, ¿por qué se considera como un controlador? ¿Podemos desarrollar aplicaciones básicas simples sin el enrutador también? En ese caso, ¿cuál será el controlador?

Respuesta

39

Para despejar las cosas un poco aquí. Un enrutador no es un controlador, es una forma de definir un mapa de ruta del lado del cliente (similar a routes.rb de Rails). Esto ayuda a enrutar las páginas del lado del cliente a ciertas acciones/controladores. Y eso es diferente del trabajo de un controlador que es proporcionar un poco de orquestación entre Modelos y Vistas. Y en realidad hay más de una forma de hacer esto usando Backbone. Citando desde Backbone's documentation:

Las referencias entre Modelos y Vistas pueden manejarse de varias maneras. A algunas personas les gusta tener punteros directos, donde las vistas corresponden a 1: 1 con los modelos (model.view y view.model). Otros prefieren tener objetos intermedios "controlador" que orquestan la creación y organización de vistas en una jerarquía. Otros todavía prefieren el enfoque que se busca, y siempre activan eventos en lugar de llamar directamente a los métodos. Todos estos estilos funcionan bien.

Esto aporta tres enfoques diferentes para lograr esto. El primero es bastante sencillo, que es tener el objeto modelo incluido como propiedad de la vista.

El segundo propone incluir un tercer componente que realiza este rol de orquestación. Creo que esto puede ser útil en aplicaciones bastante grandes y complejas. Para esto, lo animo a que mire Chaplin, una arquitectura de aplicación de muestra que usa Backbone.js. Los chicos han hecho un gran trabajo separando las cosas y también han introducido el concepto de controlador en la arquitectura.

El último enfoque sugiere usar eventos para marcar acciones y un mediador para manejar estas acciones. Para esto, los animo a que observen el mediador y los patrones de publicación/suscripción de JavaScript.

7

Es más similar a cómo funciona el iOS Cocoa Touch framework, no debe pensar en él como un backend MVC, incluso el propio equipo backbone no menciona MVC en su sitio web para evitar confusiones a menudo cuando provienen de back-end MVC . La Vista en la red troncal es lo que en iOS se llama un ViewController/AppController y generalmente su AppController principal será una Vista que establece el contenedor principal para su aplicación que generalmente también usaría como un sistema de pub/sub global y controlador para la lógica de su aplicación principal .

El enrutador es exactamente lo que dice: convierte rutas en conjunto de params y las pasa al controlador de la aplicación para averiguar qué hacer con ellas, qué subvista cargar, etc. (o si la aplicación es menos sofisticada puede cargar/cambiar las vistas directamente desde el nivel del enrutador) - Solía ​​llamarse controlador pero se renombró en (¿0.5 creo?) para despejar esta confusión.

Al menos este es nuestro enfoque: si revisó varios tutoriales en la naturaleza probablemente haya visto que cuando se trata de Backbone hay tantos enfoques para esto como muchos desarrolladores. ¡Y eso es lo hermoso de Backbone! :)

11

Salida artículo Addy Osmani`s el MV * en el cliente:

http://addyosmani.com/blog/understanding-mvc-and-mvp-for-javascript-and-backbone-developers/

Desde el artículo:

En Backbone, uno comparte la responsabilidad de un controlador con tanto Backbone.View como Backbone.Router.

y

A este respecto, contrariamente a lo que podría ser mencionado en la documentación oficial o en blogs, Backbone es ni un marco verdaderamente MVC/MVP ni MVVM.

+4

Hola, por favor, indique el contenido más relevante en la respuesta en sí ... –

2

Normalmente hago mis propios controladores y dejo que el enrutador lo haga (tomar rutas y apuntar hacia una acción del controlador). Estos controladores son caseros, solo objetos JavaScript con métodos. Toman la solicitud del enrutador, recopilan los datos correctos (colecciones, modelos ...) y toman la vista necesaria, los combinan y pasan los datos a la vista.

desde allí en su columna vertebral de nuevo.

sin embargo, recientemente llegué arcoss un complemento backbone de terceros llamado backboneMVC. He leído su documentación, pero todavía tengo que probarlo yo mismo.

Su objetivo es hacerse cargo de su enrutador y hacer rutas en función de sus controladores y las acciones que defina con él.

Eche un vistazo a esa biblioteca, sin embargo, no puedo prometer nada porque todavía tengo que construir algo con ella.