Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Dojo
Dojo Forum d'entraide sur le framework Dojo
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/01/2011, 16h46   #1
Invité régulier
 
Inscription : novembre 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 26
Points : 7
Points : 7
Par défaut Chargement dynamique de contenu

Bonjour, me revoila avec mes problèmes tordus

Pour clarifier les choses, j'utilise le modele MVC de Zend Framework.

J'ai un layout principal dans lequel il y a un tabContainer.
Chaque ContentPane de mon tabContainer possede une propriete href avec une url.
Ainsi, le contenu du contentPane est charge lors de sa premiere selection.
Le seul soucis, c'est que les elements de type dijit ne sont reconnus que si je spécifie les dojo.require adequat dans mon layout principal (celui du tabContainer).

Cependant, le faire consisterai a centraliser l'ensemble des dependances du site dans le layout principal, ce qui est anti-MVC. Ca me derange donc de le faire ainsi.

J'ai beau ajouter un bloc
Code :
<script type="text/javascript">dojo.require('dijit.form.TextBox');</script>
dans le code de ma vue spécifique, ça ne fonctionne pas.

Comment peut-on rajouter dynamiquement des require ? Me trompe-je dans ma façon de faire ?
Guildux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 10h15   #2
Membre éprouvé
 
Gibot Daniel
Inscription : janvier 2010
Messages : 313
Détails du profil
Informations personnelles :
Nom : Gibot Daniel
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2010
Messages : 313
Points : 439
Points : 439
Bonjour,

Je ne connais pas le modèle MVC de Zend Framework et du coup je ne vois pas en quoi c'ets anti MVC de ne charger qu'une seule fois un objet dans la page principale. Une fois cela fait il n'y a plus besoin d'y faire appel.

Bref, si vous souhaitez charger les objets dijit dans les contentpane, il vous faut utiliser les "dojox.layout.contentpane" qui permettent l'utilisation de scripts et surtout de "parser" la page chargée.

Version déclarative :

Code :
1
2
3
4
5
6
7
 
<div id='monPane' dojoType="dojox.layout.ContentPane" parseOnLoad='true' style='background-color:#f5eede;' title="Mon pane" href='unePage.php'>
			<script type="dojo/connect" event="onLoad"> 
				//mon script au chargement
                                dojo.require('dijit.form.TextBox');
			</script>
			</div>
Version programmatique :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
var page = new dojox.layout.ContentPane({
			id:'page',
			region: "center",
			loadingMessage: "<center>Veuillez patienter, chargement de la page en cours...</center>",
			errorMessage: "<center>Une erreur est survenue. Impossible de charger le contenu de la page.</center>",
			executeScripts: "true", 
			parseOnLoad: 'true', 
			href: lien
		});
		dijit.byId('main').addChild(page);
		dijit.byId('main').startup();
		dojo.connect(dijit.byId('page'),"onLoad",function(){
			dojo.require('dijit.form.TextBox');
		});
Daniel_Gibot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/01/2011, 22h50   #3
Invité régulier
 
Inscription : novembre 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 26
Points : 7
Points : 7
Bonsoir,

Merci pour l'info. Cependant, cela ne semble pas fonctionner. La balise script doit elle être dans le code initial du contentPane ou dans la partie chargée dynamiquement (j'ai pour le moment teste cette seconde solution) ?

Pour revenir son mon concept de l'anti-MVC, je conçois le modèle MVC comme une répartition des taches de façon a ce que chaque vue s'occupe de ce qui la regarde, et ainsi ajouter/modifier/supprimer des modèle/vue/controlleur a notre guise sans impacter le reste du site.

Hors, en l’état actuel des choses, pour pouvoir charger les différents modules dojo, il faut passer par la vue principale, qui contient le menu. Cela revient donc a centraliser dans la vue du menu l'ensemble du chargement des dépendances des autres vues.

Ainsi, si je veux ajouter une vue utilisant des modules dojo encore non utilises, je suis oblige de modifier 2 vues (la nouvelle + la vue principale (celle du menu)). C'est ce que je considère comme étant un anti-MVC car nous perdons la notion d’indépendance des modèle/vue/controlleur les uns par rapport aux autres.
Guildux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 09h01   #4
Membre éprouvé
 
Gibot Daniel
Inscription : janvier 2010
Messages : 313
Détails du profil
Informations personnelles :
Nom : Gibot Daniel
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2010
Messages : 313
Points : 439
Points : 439
Bonjour,

La balise script doit être dans la partie initiale du contentPane.
Ce que j'ai l'habitude de faire c'est créer une fonction dans la partie indépendante (par exemple "chargement") que j'appelle dans la balise script. Ce qui donne l'impression que c'est "indépendant".

Dans la partie principale :
Code :
1
2
3
4
5
6
7
 
<div id='monPane' dojoType="dojox.layout.ContentPane" parseOnLoad='true' style='background-color:#f5eede;' title="Mon pane" href='unePage.php'>
			<script type="dojo/connect" event="onLoad"> 
				//mon script au chargement
                                chargement();
			</script>
			</div>
Dans la page chargée par le contentPane :
Code :
1
2
3
4
5
 
function chargement(){
           dojo.require('dijit.form.TextBox');
           //etc...
}
Il est tout a fait possible d'ajouter des modules dans chaque partie indépendante.
Daniel_Gibot est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h23.


 
 
 
 
Partenaires

Hébergement Web