Cartographie JSON à backbone.js collections
Bien, on dirait que j'ai besoin d'un conseil pour me pointer dans la bonne direction. Cette question est en deux parties - travailler avec mult-dimensions JSON et des Collections de Collections de JSON.
Fond
J'ai quelques JSON qui va être récupéré à partir d'un serveur et d'avoir le contrôle sur la façon dont il pourrait être formaté.
Multi-Dimensions JSON
J'ai un peu de mal à être en mesure de connecter le modèle de la pièces dans le JSON. Dire que je voulais rendre que chacun des postes le nom de l'auteur, et le contenu de statut dans l'échantillon JSON ci-dessous. Je vais avoir aucun problème à obtenir le statut dans le modèle, mais le nom de l'auteur, je suis un peu confus, comment faire pour l'obtenir. De ma compréhension, je dois remplacer les analyser.
Est cette mauvaise normes /est-il une meilleure structure JSON que je devrais utiliser? Serait-il préférable de le garder aussi plat que possible? C'est déplacer le nom de l'auteur et la photo d'un niveau?
Je lisais Comment construire une Collection/Modèle imbriqué avec JSON Backbone.js mais il est encore un peu obscure pour moi.
Collection dans les Collections
Est là une belle façon de faire une collection au sein d'une collection pour backbone.js? Je vais avoir une collection de messages, puis aurait une collection de commentaires sur ce post. Comme je suis le développement de la colonne vertébrale est-il même possible?
De ce que je comprends dans Backbone.js Collection de Collections et Backbone.js Collection de Collections Problème, il ressemblerait à quelque chose comme ça?
var Comments = Backbone.Model.extend({
defaults : {
_id : "",
text : "",
author : ""
}
})
var CommentsCollection = Backbone.Collection.extend({ model : Comments })
var Posts = Backbone.Model.extend({
defaults : {
_id : "",
author : "",
status : "",
comments : new CommentsCollection
}
})
var PostsCollection = Backbone.Collection.extend({ model : Posts })
Échantillon JSON
{
"posts" : [
{
"_id": "50f5f5d4014e045f000002",
"author": {
"name" : "Chris Crawford",
"photo" : "http://example.com/photo.jpg"
},
"status": "This is a sample message.",
"comments": [
{
"_id": "5160eacbe4b020ec56a46844",
"text": "This is the content of the comment.",
"author": "Bob Hope"
},
{
"_id": "5160eacbe4b020ec56a46845",
"text": "This is the content of the comment.",
"author": "Bob Hope"
},
{
...
}
]
},
{
"_id": "50f5f5d4014e045f000003",
"author": {
"name" : "Chris Crawford",
"photo" : "http://example.com/photo.jpg"
},
"status": "This is another sample message.",
"comments": [
{
"_id": "5160eacbe4b020ec56a46846",
"text": "This is the content of the comment.",
"author": "Bob Hope"
},
{
"_id": "5160eacbe4b020ec56a46847",
"text": "This is the content of the comment.",
"author": "Bob Hope"
},
{
...
}
]
},
{
...
}
]}
J'apprécie même toutes les allusions à la guilde moi. Merci!
OriginalL'auteur Sir.Nathan Stassen | 2013-07-26
Vous devez vous connecter pour publier un commentaire.
Il peut être écrasante quand vous essayez d'écrire le code pour le faire fonctionner pour les objets imbriqués. Mais pour faire plus simple vous permet de le casser en petits morceaux maniables.
Je pense que dans ces lignes.
Collections
Modèles
Et
each model in the Posts collection
aura 3 ensembles d'attributs(Peut-être pas le bon terme).1er niveau d'attributs (état , id).
2e - Auteur de l'attribut qui peut être placée dans un autre Modèle(Authod Modèle).
3e - recueil des commentaires pour chaque Poste du Modèle.
Collection dans les Collections serait un peu déroutant ici.
Comme vous l'auriez des Modèles de la Collection(
Post Model inside Posts Collection
) et chaque Modèle d'imbriquer une collection de nouveau(Comments collection inside Post Model
). Fondamentalement, vous serait de la Manipulation d'unCollection inside a Model
.Il est parfaitement plausible solution pour gérer le traitement de cette dans la méthode d'analyse. Lorsque vous initialisez une Collection ou d'un Modèle , d'Analyser les méthodes est appelée en premier et ensuite initialiser est appelé. Donc il est parfaitement logique pour gérer la logique à l'intérieur de la méthode d'analyse et il n'est pas du tout une mauvaise série.
Je ne pense pas que c'est une bonne idée de garder ce plat à un seul niveau, comme les autres données n'est pas requise sur le premier niveau, en premier lieu.
Donc la façon dont je l'approche de ce problème est d'écrire le
parse
méthode dans lePost Model
qui traite la réponse et de joindre l'Auteur du modèle et les Observations de la collection directement sur le Modèle plutôt que comme un attribut sur le Modèle de garder les attributs de hachage propre composé de 1er niveau des données Post. J'ai l'impression sera plus propre et beaucoup plus évolutif sur le long terme.Vérifier Violon
grâce sushanth..cela aide beaucoup à tous les naïfs, les apprenants comme moi d'apprentissage colonne vertébrale autour de.
OriginalL'auteur Sushanth --
(Édité pour corriger mon erreur de lecture de la question.)
Il n'y a pas besoin de surcharger
parse
méthode du modèle, sauf si vous voulez un changement de sa structure. Mais il semble que vous n'avez pas besoin d' -- pour rendre le nom de l'auteur, il suffit d'utiliserauthor.name
dans la vue:Aussi loin que l'initialisation de la collection imbriquées, votre approche est tout à fait exact. Tout ce que vous avez à faire est de convertir l'objet JSON Dorsale modèles, et de les transmettre à l'
PostsCollection
(leBackbone.Collection
constructeur accepte un tableau de l'épine Dorsale modèles, pas raw JSON). Une façon de le faire est d'utilisermap
:Notez que vous aurez besoin de faire quelque chose de similaire dans le
initialize
méthode de laPosts
modèle -- récupérer les commentaires tableau JSON, et de le convertir à un tableau deComments
modèles:Voici un exemple fonctionnel.
OriginalL'auteur McGarnagle
Mise à jour, j'ai trouvé un Mannequin pour la colonne vertébrale qui fournit des relations entre les modèles et entre les collections. Il s'est avéré être une excellente solution pour les Collections à l'intérieur de Collections ainsi que de Profonds Imbriquée Modèle de données.
Les modèles sont pré-définis avec leurs relations à d'autres modèles via clé. Pendant l'initialisation/analyser le modèle de toutes les valeurs dans le JSON à cette clé est passée à un nouveau modèle ou d'une collection. Une relation est créée entre les deux modèles et des collections.
Cela veut dire avec l'exemple ci-dessus, nous pouvons faire quelque chose comme cela avec nos modèles:
Installation
Utilisation
Violon
Exemple de travail en JSFiddle
OriginalL'auteur Sir.Nathan Stassen