2009-11-26 5 views
0

J'ai un modèle qui rend un graphique selon une liste donnée (récupérée de ma couche de domaine). Ce modèle est affiché plusieurs fois (avec une liste différente) sur une même page (disons "page d'accueil") et sur plusieurs pages également.Meilleure conception MVC pour rendre un modèle de gravier et transmettre des données à ce modèle?

Par exemple,

<g:render template="/template/chart" model="order: 'asc', orderBy: 'age', max: 5, domainClass: Person"></g:render> 

devrait afficher une liste de 5 personnes ordonnées par âge pour ascendant.

Mais le problème est que je dois construire la liste des personnes en interrogeant la couche de domaine et, malheureusement, cela peut être fait que par le code du modèle comme:

<% 
    def vizuService = grailsApplication.classLoader.loadClass('com.myapp.VizuService').newInstance() 
%> 
<img src="${vizuService.getChartImage(order, orderBy, max, domainClass)}"/> 
//The service method getChartImage will query the DB 

Cette conception est erronée parce que je suis en train de récupérer mes données à travers ma couche View. Mais, Je ne peux pas raisonnablement envoyer la liste de données au modèle à travers le contrôleur de la page d'accueil parce que le contrôleur peut même pas savoir combien de graphiques (et quelles données) sont affichés dans la page d'accueil. Alors, comment puis-je le concevoir en de manière MVC? (c'est-à-dire que le contrôleur devrait être responsable de l'obtention/transmission des données). TagLib est-il le seul moyen de le faire? (et IMO, TagLib ne respecte pas vraiment les principes MVC) Peut-être, AJAX est la (seule) solution?

Merci pour vos idées.

Répondre

0

J'ai résolu mon problème en utilisant la balise include qui permet d'inclure des vues partielles rendues par la réponse d'un autre contrôleur/action

Questions connexes