IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ Ext JS/Sencha

FAQ Ext JS/SenchaConsultez toutes les FAQ

Nombre d'auteurs : 8, nombre de questions : 59, dernière mise à jour : 15 juin 2021 

 
OuvrirSommaireOrganisation du frameworkLes données

Un modèle de données est une définition qui s'apparente à une définition UML. On peut voir ça comme un DataObjectDataObject. Le but est de stocker et transporter des données structurées. Il ne s'agit pas ici de définir une classe avec des méthodes de manipulations mais juste un accès aux données. Contrairement à un simple objet JavaScript, un objet défini à partir d'un modèle est conforme à la définition de ce modèle.

Créé le 10 juillet 2011  par sekaijin

Un DataStore est un espace de stockage de données conforme à un modèle. Il permet la lecture et l'écriture de données. Associé à un proxy, il permet les échanges entre le client et le serveur.

Jusqu'à la version 3.x, il existe plusieurs types de DataStore en fonction de la façon dont les données sont lues. ArrayStore, JsonStore, XmlStore,...

À partir de la version 4, il n'existe que des DataStores. Le DataReader associé au DataStore est spécifique à une méthode de lecture.

Le rôle du DataStore est de faire la liaison entre un modèle, un stockage (Array, Ajax ...), un Reader et un Writer.

Créé le 10 juillet 2011  par sekaijin

Il permet à tous les composants de vos applications d'avoir accès à des données de façon uniforme.
Les composants vont lire et écrire dans les DataStores quel que soit le type de stockage. Si votre application évolue ou change de protocole, mais que la définition des données ne change pas, seuls le Writer et le Reader ou le Proxy changeront.

Un bon moyen de commencer un développement est d'utiliser un Stockage local dans un Array avec un proxy LocalStorage. Les données sont alors écrites en dur dans le tableau. Une fois l'application suffisamment avancée, on peut développer la partie serveur et changer de proxy (principe de séparation des couches).

Créé le 10 juillet 2011  par sekaijin

Le proxy est là pour faire l'interface entre la zone réelle de stockage et le DataStore. Il va ainsi relayer vers les serveurs les demandes de lecture ou d'écriture des données. Les proxy de Ext-JS supportent de nombreux protocoles.

 
Sélectionnez
var myStore = new Ext.data.Store({
    model: 'User',
    proxy: {
        type: 'ajax',
        url : '/users.json',
        reader: {
            type: 'json',
            root: 'users'
        }
    },
    autoLoad: true
});
Créé le 10 juillet 2011  par sekaijin

Dans l'utilisation des stores, par exemple avec une grille de données (DataGrid ou GridPanel), il est parfois nécessaire de demander au store d'envoyer ses requêtes Ajax avec des paramètres particuliers. Par exemple, vous avez un store qui est relié à une DataGrid et vous avez besoin de faire une recherche filtrée sur certains de ses champs de données.
Il y a une différence notable pour faire cela entre Ext JS 3.x et Ext JS 4.x.

En Ext JS 3.x

L'objet qui permet la définition des paramètres à passer dans la requête Ajax d'un store s'appelle baseParams. Il peut se définir dans la déclaration du store :

 
Sélectionnez
var myStore = new Ext.data.Store({
    model: 'User',
	baseParams: {
		filter_id: filtId,
		filter_name: filtName
	},
    proxy: {
        type: 'ajax',
        url : '/users.json',
        reader: {
            type: 'json',
            root: 'users'
        }
    },
    autoLoad: true
});


filtId et filtName sont des variables connues au moment de la déclaration du store.

Notez que la propriété baseParams est une propriété du store lui-même.

On peut aussi le déclarer dynamiquement :

 
Sélectionnez
myStore.baseParams = {"filter_id":filtId,"filter_name":filtName};

ou

 
Sélectionnez
myStore.baseParams.filter_id = filtId;
myStore.baseParams.filter_name = filtName;



En Ext JS 4.x

La gestion des paramètres de requête Ajax d'un store est différente. La propriété s'appelle maintenant extraParams, et elle n'est plus rattachée au store mais à son proxy. Cela donne :

 
Sélectionnez
var myStore = new Ext.data.Store({
    model: 'User',
    proxy: {
        type: 'ajax',
        url : '/users.json',
		extraParams: {
			filter_id: filtId,
			filter_name: filtName
		},
        reader: {
            type: 'json',
            root: 'users'
        }
    },
    autoLoad: true
});


On peut toujours les définir dynamiquement :

 
Sélectionnez
myStore.proxy.extraParams = {"filter_id":filtId,"filter_name":filtName};

ou

 
Sélectionnez
myGrid.getStore().proxy.extraParams.filter_id = filtId;
myGrid.getStore().proxy.extraParams.filter_name = filtName;
Créé le 28 octobre 2011  par kalimukti

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.