Comment gérer les balises dans un modèle Ember.js
-
28-10-2019 - |
Question
J'ai un modèle Ember.js qui n'est essentiellement qu'un ID, un titre, un corps et des balises, où chaque balise a un ID et un titre. Voici le JSON que je nourris en Ember de Rails:
{"created_at":"2012-02-19T03:28:26Z",
"body":"Example body",
"id":1,
"title":"Example title",
"updated_at":"2012-02-19T03:28:26Z"
"tags" :
{"id":1,
"name":"retweet"},
{"id":2,
"name":"twitter"},
{"id":3,
"name":"social"}
}
Question 1: Comment puis-je modéliser les balises du modèle Ember.js? S'il y a juste un champ "Tags" qui contient un tableau JS de balises, ou qu'il y ait un champ pour chaque balise, donc il y aurait Tag1, Tag2, Tag3, etc., où chaque champ a un tableau d'ID et Titre?
Question 2: Dans mes modèles de guidon, comment puis-je utiliser les balises pour lier chaque balise vers /tags/{{tag.id}}?
Je ne peux pas simplement utiliser <a href="/tags/{{tag.id}}"></a>
Puisque vous ne pouvez pas intégrer des valeurs de guidon dans un attribut comme celui-ci, et je ne peux pas utiliser {{bindattr}} car vous ne pouvez pas concaténer les chaînes (comme / tags /) à la valeur. Cela me laisse avec une propriété calculée (qui est la "bonne voie", selon ce) pour chaque balise (donc la propriété calculée "tagurl" reviendrait "/tag/" + tag.id
), mais je ne sais pas comment procéder parce que je ne sais pas comment les balises doivent être stockées (question 1 ci-dessus).
La solution
Étendre une vue dans votre code:
App.tagView = Em.View.extend
templateName: "tTagView"
tagURL: (->
'/tag/" + @get('id')
).property()
Dans votre guidon, faites cela
{{#each tags}}
{{view App.tagView content=this}}
{{/each}}
Vous aurez besoin d'un modèle
<script id="tTagView" data-template-name='tTagView' type="text/x-handlebars">
<a {{bindAttr href="tagURL"}}>{{Name}}</a>
</script>
Voici tout ce qui fonctionne dans un violon:http://jsfiddle.net/herty/12/