2011-02-23 13 views
12

backbone.js se basa en aplicaciones relajantes para inicializar modelos, pero ¿qué pasa con la mejora progresiva? Los datos ya están en dom (o parte de ellos), así que ¿deberían mis modelos seguir haciendo llamadas la interfaz tranquila aunque existan los elementos html? ¿Hay otro diseño de biblioteca que pueda ser más adecuado para este caso?¿Tiene sentido inicializar modelos del DOM en backbone.js?

Respuesta

-2

No debe usar el elemento DOM para inicializar su modelo con datos de back-end. Tienes una infraestructura realmente buena con una red troncal para no hacer esto. Cuando dependes del DOM, necesitas cambiar tu javascript siempre que la estructura del DOM cambie debido al diseño, por ejemplo.

Además, no confíe en la vista de la red troncal para crear el modelo. Debe ir al revés, el modelo dicta las vistas en la página.

Simplemente agregue un elemento script y cree sus objetos JS directamente allí. Puede inicializar colecciones, modelos individuales, etc.

se puede hacer lo mismo con plantillas o bloques de construcción DOM de interfaz de usuario:

<script type="text/js-template"> 
    <!-- Your template as realy do elements or using a js templating engine like _.template--> 
</script> 

de carga hasta su página y tener su aplicación Play localmente.

+0

Una desventaja de no usar el DOM en mi opinión es la falta de soporte del motor de búsqueda en la carga de datos inicial. – UpTheCreek

+0

No es cierto. Lo que dije no era cargar datos basados ​​en tu dom en tu JS. Cargas los datos en la página como JSON (en el encabezado, cuerpo o lo que sea). Su primer dom cargado debe estar todo allí y su código js simplemente se conecta con él y lo mantiene actualizado con el modelo. – Julien

+0

¿Entonces los datos se muestran en el lado del servidor en dos lugares? (una vez en el dom, una vez como JSON en el script) – UpTheCreek

6

Backbone puede manejar eso bastante bien. La forma en que manejo este caso es tener un modelo de fábrica que pueda recibir un nodo DOM y analizarlo para extraer datos (id, campos, etc.).

Si proporciona una opción 'el' a View constructor, la red troncal no recuperará ni renderizará el modelo, por lo que puede mantener su nodo como está.

Al cambiar los datos, el controlador se sincronizará con el servidor. Sin embargo, debe tener cuidado de incluir los datos que su aplicación necesite para mostrarse o no.

+4

http://documentcloud.github.com/backbone/#FAQ-bootstrap Realizan un pequeño truco ordenado de serializar sus modelos a json al representar la plantilla del lado del servidor. Podría ir de cualquier manera realmente. –

+1

@Arthur, esto es interesante. ¿Podrían profundizar en cómo se extrae la información en el DOM de su modelo? – UpTheCreek

+2

@Arthur, estoy de acuerdo, esto es interesante. No puedo encontrar a nadie más blogueando sobre hacer este tipo de cosas con un JS MVC Framework, y aunque tiene sentido para mí abordar el desarrollo de sitios web, me pregunto por qué nadie más lo está haciendo. Esencialmente, no quiero utilizar el paradigma de la aplicación de una sola página. – JonB

Cuestiones relacionadas