Depuis Backbone.js n'est pas un cadre en tant que tel, il n'y a pas une seule "bonne" façon de faire n'importe quoi. Cependant, il y a des nuances dans la mise en œuvre que vous aider à avoir l'idée. Aussi, il y a quelques temps-testé le code de l'organisation des pratiques que vous pouvez appliquer. Mais je vais vous expliquer le point de vue d'abord.
Vues
Vues de la colonne vertébrale sont liés à certains éléments du DOM (c'est ce que l' el
de la propriété est pour).
Si, lorsque la vue est initialisé, il a un el
d'attribut, puis Backbone.js en fait une propriété de la nouvelle instance de vue. Sinon, il semble pour l' tagName
, id
, et className
attributs, crée le correspondant DOM objet, et l'attribue à l' el
des biens de la nouvelle instance de vue de toute façon. (C'est expliqué dans la source.) Si il n'y a même pas de l' tagName
, alors <div>
élément est créé par défaut.
Ainsi, vous pouvez deviner pourquoi TodoView
et AppView
utiliser des approches différentes. L' #todoapp
élément existe d'abord sur la page en HTML, AppView
pouvez simplement l'utiliser. Mais quand une vue pour une todo élément est créé, il n'y a aucun élément du DOM pour encore; de sorte que le développeur a tagName
définie sur la classe de base pour créer un élément de liste automatiquement. (Il ne serait pas difficile de le faire à la main dans l' initialize()
méthode, mais épine Dorsale permet de gagner du temps en le faisant pour vous.)
Généralement un point de vue relève de l'une des deux catégories: les vues pour les instances de modèle, et de vues pour les collections. Épine dorsale n'a pas la force , mais il suggère que c'est probablement ce que vous voulez: si vous instanciez le point de vue d' collection
ou model
options, ils deviennent des propriétés de l'affichage nouvellement créé instance, de sorte que vous pouvez accéder via view.collection
ou view.model
. (Si vous avez, par exemple, créer une instance de la vue avec l' foo
option, il sera mis en view.options.foo
.)
Dépendances
Les bonnes pratiques
C'est juste mon avis.
Moins de dépendance, c'est mieux.
-
Suivant le modèle MVC a beaucoup d'avantages.
Notez que Backbone.js la terminologie ne correspond pas à la MVC du classique. C'est normal, MVC != un ensemble de classes, et ses définitions varient un peu. C'est plus de l'idéal que vous devriez avoir dans le dos de votre esprit " (cité d'après Ce qui est MVC et quels sont les avantages de celui-ci?).
MVC | Backbone.js Ce qu'il ne
Contrôleur | Vue (pour la plupart) | Poignées interaction de l'utilisateur
Afficher | modèle rendu par vue | Affiche les données
Modèle | Model & de Collection | Représente les données, gère les accès aux données
-
Le modèle de la couche ne doit pas normalement dépend de rien. Dans MVC, le modèle est l'endroit où vous accéder à vos données. Qui n'a rien à voir avec, par exemple, la présentation de ces données.
De la colonne vertébrale, un modèle peut être une partie d'un ensemble, mais ce n'est pas une dépendance forte (autant que je sache, il aide à automatiquement comprendre Url de l'API de points de terminaison correspondant à ce modèle.)
Dans la colonne vertébrale, une collection peut avoir un modèle correspondant de la classe assignée, mais c'est pas non plus nécessaire.
De la colonne vertébrale, un routeur dépend généralement de niveau supérieur vues (comme les points de vue pour l'ensemble des pages ou des sections de la page), pour les rendre en réponse à un changement dans l'application de l'état. Ces points de vue, à son tour, dépend de certains de niveau inférieur vues, comme les widgets / sections de la page. Ces points de vue peuvent compter sur les collections et les autres, même à un niveau plus bas points de vue. Ces derniers, à leur tour, dépendent notamment d'instances de modèle.
À titre d'exemple (les flèches montrent l' "dépend de" type de relation):
+-------------+ +---------------+ +------------+
Etat |MainRouter | Données: |ItemCollection | |ItemModel |
Contrôle: |-------------| |---------------| |------------|
| | |/api/articles +-->|/api/articles/*|
| | | | | |
| | | | | |
+---+-+-------+ +---------------+ +------------+
| +----------------+ ^ ^
v v | |
+-------------+ +-------------+ | |
Au niveau de la Page |AboutView | |AppView | | |
vues: |-------------| |-------------| | |
| article | | article | | |
| role="main" | | role="main" | | |
+--+-+--------+ +--+-+-+------+ | |
| +---------------|-|-|----+ | |
| +----------+ | +----|---------+ | |
v v v v v | |
+--------------+ +--------------+ +---+-----------+ |
Widget |SidebarView | |HeaderView | |ItemListView | |
vues: |--------------| |--------------| |---------------| |
| de côté | | en-tête | | ul | |
| | | | | | |
| | | | | | |
+--------------+ +--------------+ +-----------+---+ |
| |
v |
+--------+---+
|ItemAsLiView|
|------------|
| li |
| |
+------------+
Notez que vous pouvez avoir plusieurs routeurs mis en place, auquel cas les choses un peu différemment.
todos.js
Dans le Todos exemple, le développeur a décidé qu' Todo
d'instances de modèle devrait dépendre de l'correspondant TodoView instances. Lors de l' TodoView
est instancié, il crée sur le modèle de l'exemple d'une propriété view
et s'attribue à elle. De sorte qu'il peut être consulté en some_todo_model.view
. Toutefois, il convient de noter que model.view
est utilisée une fois seulement-en Todo
modèle clear()
méthode, pour supprimer le point de vue de l'instance lorsque le modèle est désactivée.
Je pense que la dépendance n'est pas nécessaire. Cependant, pour une petite application, il est peut-être bien.
Je ne pouvais pas trouver un exemple d'accéder this.model.view
dans la vue, donc je ne peux pas commenter sur ce point.
Voir aussi
-
Réponses par Julien Guimont-la quasi-totalité d'entre eux sont sur le Backbone.js je pense que c'est une excellente source d'information.