Améliorer les applications Web avec AmplifyJS

Il semble y avoir une nouvelle récolte de bibliothèques JavaScript spéciales chaque semaine. Il semble que le temps de n'utiliser qu'une bibliothèque par projet soit révolu. Aujourd'hui, je vais vous présenter une bibliothèque de composants très cool, AmplifyJS, qui ne propose que quelques composants très spécialisés..


Devs, Rencontrez AmplifyJS

Selon le site:

AmplifyJS est un ensemble de composants conçus pour résoudre les problèmes courants d'applications Web..

Cela a l'air prestigieux, mais qu'est-ce qui se trouve dans cette bibliothèque??

AmplifyJS a trois pièces principales:

  • Une API AJAX
  • Un système d'événement PubSub
  • Une API de stockage côté client

Rejoignez-moi maintenant pour une visite de l'incroyable bibliothèque AmplifyJS! Nous allons créer un système de suivi des employés extrêmement simple. vraiment, c’est juste une table avec quelques fonctionnalités d’application, grâce (en partie) à AmplifyJS.

Nous n'avons pas vraiment besoin de nous préoccuper des problèmes de style et de mise en page aujourd'hui, donc je vais utiliser la bibliothèque Twitter Bootstrap. C'est incroyablement simple: il suffit d'inclure le lien au fichier CSS -qu’ils vous ont laissé le lien direct de Github-et vous êtes en affaires.


Étape 1: configuration

Alors, faites-vous un répertoire de projet. Commencez avec le index.html fichier, et un js dossier. Maintenant, rendez-vous sur le site Web AmplifyJS et cliquez sur cet énorme fichier rouge? Télécharger? bouton. Une fois, vous avez le zip de la bibliothèque, extrayez-le et déplacez-le dans le dossier js dossier. Nous allons aussi avoir besoin de quelques autres choses:

  • jQuery: le composant AJAX d'Amplify utilise la fonctionnalité AJAX de jQuery sous son API, du moins par défaut. Mais nous utiliserons jQuery pour d’autres choses, alors apportez-les dans.
  • bootstrap-modal.js: La bibliothèque Twitter Bootstrap comprend quelques scripts pour rendre tout interactif. Et nous allons en utiliser un: le plugin jQuery de la fenêtre modale. Téléchargez-le et ajoutez-le à cela js dossier.
  • Il y a deux autres scripts que je mentionnerai en cours de route, mais nous les écrirons nous-mêmes..

Ensuite, commencez notre index.html fichier comme ceci:

   AmplifyJS    

Les commandes

Employés

Si vous ne maîtrisez pas l'utilisation de Twitter Bootstrap, vous constaterez qu'il n'est pas facile de l'utiliser. Nous avons un récipient c'est 940px large. Ensuite, nous avons deux rangées. Le premier a une colonne, qui couvre les 16 colonnes. L’autre a deux colonnes: l’une est large de 4 colonnes et l’autre est large de 12 colonnes.

Une dernière chose, avant d’en arriver à un vrai codage: nous allons faire apparaître une fenêtre modale qui permet de saisir les employés. Sous le

, ajouter cette fenêtre modale HTML. Oui, cela ressemble à beaucoup de code, mais il s’agit principalement de choses Bootstrap:

X

Ajouter un employé

D'accord, nous sommes prêts à partir! Codons.


Étape 2: Câblage de la fenêtre modale

Ouvrir un scénario étiquette au bas de index.html (Je fais juste cela en ligne, mais je me sens obligé de le mettre dans un nouveau fichier JS). commencez de cette façon:

 (function () var employeeModal = $ ('# add-employee-modal'). modal (toile de fond: 'statique'); ());

Nous utilisons le plugin Bootstrap modal ici; cela juste? instancie? la fenêtre modale. Maintenant, nous voulons que la fenêtre apparaisse lorsque nous cliquons sur? Ajouter un employé? bouton. Bien sûr, nous devrons ajouter le bouton en premier: mettez ceci dans le

, juste sous la

.

 

Cette data-controls-modal = 'add-employee-modal' attribut affichera le modal avec ledit ID lorsque le bouton sera cliqué.

Ainsi, l'utilisateur devra remplir le formulaire, cliquez sur le bouton? Ajouter? bouton qui a un identifiant de créer-employé. Alors connectons un gestionnaire d’événements click pour le bouton:

$ ('# create-employee'). click (function () var form = $ ('# employee-form'); employeeModal.modal ('hide'); EMPLOYEE.create (form.find ('[name = prenom] '). val (), form.find (' [nom = nom] '). val (), form.find (' [nom = rôle] '). val ()); form.find (' entrée ') .val ("););

Nous obtenons le formulaire, puis masquons la fenêtre modale. Ensuite, nous allons appeler un EMPLOYEE.create méthode, en passant le prénom, le nom et le rôle en tant que les trois paramètres. Enfin, nous effaçons le formulaire.

amplifier.publier

Mais attendez, vous dites, c'est quoi EMPLOYEE.create? Eh bien, c'est une classe micro? que j'ai mis en js / employee.js. Vérifiez-le:

var EMPLOYEE = create: function (prénom, nom, rôle) var employé = prénom: prénom, nom: dernier nom, rôle: rôle, dateEmployé: nouveau Date (); amplify.publish ('créé par l'employé', employé); retour employé ;

Vous voudrez jeter une balise de script pour cela avec les autres.

Assez simple, non? Nous venons de créer un littéral d'objet avec nos paramètres et d'ajouter un Date employée propriété. Mais, alors et enfin!, Nous avons la première entrée du framework AmplifyJS. Ici, nous utilisons le composant pub / sub events. C'est idéal pour effectuer un couplage lâche entre des parties de votre application..

Cette méthode n'a pas besoin de savoir si une autre partie de notre code veut faire quelque chose avec chaque nouvel employé que nous créons. Notre? Ajouter? le gestionnaire d'événement de bouton n'a pas à s'en inquiéter. Nous allons simplement le publier en tant que? Créé par un employé? événement pour toute partie qui est intéressé à prendre. Nous transmettons notre nouvel objet employé sous forme de données à toute personne intéressée. Ensuite, nous retournons l'objet employé (même si nous n'en gardons pas trace dans notre gestionnaire d'événements)..


Étape 3: Réagir avec amplify.subscribe

Alors, est toute autre partie de notre application intéressée par le? employé-créé ??? Oui, en fait. Nous voulons faire deux choses. Tout d’abord, ajoutez cet employé à un tableau de notre page. Deuxièmement, nous voulons stocker l'employé dans le stockage local. Voici la première partie de cela:

 amplify.subscribe ('employee-created', fonction (employee) employeeTable.add ([employee.firstName, employee.lastName, employee.role, employee.dateEmployed]); newAlert ('success', 'New Employee Added') ;);

Pour vous abonner à un événement, nous appelons amplify.subscribe. Nous voulons nous abonner à la? Employé-créé ?; quand cela se produit, nous voulons l'ajouter à la employeeTable; remarquez qu'au lieu de simplement passer le employé objet, nous? convertissons? à un tableau; En effet, nous devons nous assurer que les éléments seront dans le bon ordre. Ensuite, nous souhaitons afficher un message pour informer notre utilisateur que l’employé a été ajouté avec succès..

Quoi de neuf avec ça employeeTable variable? Eh bien, premièrement, nous devons ajouter le

à notre document. Donc, sous nos? Employés?

, Ajoute ça:

Prénom Nom de famille Rôle Date employée

Maintenant, nous devons capturer ce tableau comme une variable dans notre var déclaration en haut:

employeeTable = TABLE.create ($ ('# employee-table')),

Et TABLE? C'est la dernière pièce de JS pour ce puzzle. Mettez ceci dans js / table.js et n'oubliez pas le tag script:

var TABLE = proto: init: function (el) this.element = $ (el) .find ('tbody'); , ajouter: function (arr) var row = $ ('') .html (function () return $ .map (arr, fonction (valeur) return''+ valeur +''; ). join (");); this.element.append (ligne);, load: function (lignes, ordre) pour (var i = 0; lignes [i]; i ++) this.add ( lignes [i]); var champs = []; pour (var j = 0; ordre [j]; j ++) champs.push (lignes [i] [ordre [j]]); ceci.add (champs );, clear: function () this.element.empty ();, create: function (el) var table = Objet.create (this.proto); table.init (el); table retour; ;

C'est un peu compliqué, mais vous ne devriez pas avoir de problème à le faire. Nous avons un proto propriété qui est le prototype de nos instances de table. Puis, quand on appelle créer, nous utilisons Object.create pour créer un objet qui hérite de this.proto. Après cela, nous appelons le init méthode pour définir les propriétés. Enfin, nous retournons l'instance de table.

Cette micro-API nous permet de travailler facilement avec notre table. Vous devriez être capable de voir comment passer un tableau à la ajouter La méthode ajoutera une ligne à notre table. Notez également que nous pouvons passer un tableau de lignes à charge et remplissez la table; nous l'utilisons bientôt.

Oh, alors il y a le nouveauAlert méthode que nous avons appelée:

function newAlert (type, message) $ ('# zone d'alerte'). append ($ ('

'+ message +'

')); setTimeout (function () $ ('. alert-message'). fadeOut ('slow', function () this.parentNode.removeChild (this);), 2000);

Comme vous pouvez le constater, ceci ajoute simplement un div à l'envers

; le nouveau div tire parti du style d'alerte de Twitter Bootstrap; après deux secondes, nous effaçons l'alerte et la retirons.

amplify.store

Mais ce n'est pas la seule pensée que nous voulons faire quand le? Employé-créé? événement se produit:

employeeStore = amplify.store ('employee') || [];

En haut, avec nos deux autres variables, faisons la troisième et dernière: employeeStore. Si amplify.store ('employés') renvoie quelque chose, nous l'utilisons; sinon, nous utiliserons un tableau vide.

amplify.subscribe ('créé par l'employé', fonction (employé) employéStore.push (employé); amplify.store ('employés', employéStore););

Nous utilisons maintenant le composant de stockage de AmplifyJS. Cela ne pourrait vraiment pas être plus simple: stocker une valeur, passer amplify.store une clé et la valeur. Pour récupérer la valeur, remettez-lui la clé. En dessous, AmplifyJS stocke cette clé et cette valeur dans le type de stockage disponible sur ce navigateur..

Donc, ici, nous ajoutons un nouvel employé au tableau et stockons le tableau dans le fichier? Employés? clé. Je dois noter que puisque nous stockons un tableau, AmplifyJS utilise la sérialisation JSON pour convertir ce tableau en chaîne. Par conséquent, si vous essayez de prendre en charge les navigateurs sans support JSON natif (IE 5 et ultérieur, Firefox 3 et inférieur), vous souhaiterez inclure la bibliothèque json2.js..


Étape 4: Enregistrement sur le serveur (avec amplifier.request)

Dans notre petit exemple d'application, nous disons que par défaut, les données que vous avez insérées dans l'application ne sont conservées que sur votre ordinateur (dans ce navigateur). Cependant, si l'utilisateur le souhaite, nous lui permettons de l'afficher sur le serveur (hypothétiquement, il s'agit d'informations confidentielles qu'il ne souhaite peut-être pas partager. Toutefois, s'il souhaite y accéder à partir d'autres périphériques, il pourrait le faire. ).

Nous allons commencer par ajouter un bouton pour télécharger les données.

Maintenant, bien sûr, vos brillants esprits ont déjà compris que nous utiliserions le composant AJAX d’AmplifyJS. amplifier.request est une API incroyablement flexible, et nous ne regarderons pas tout ce qu’elle peut faire. Cependant, vous aurez une bonne idée de la façon dont cela fonctionne ici.

Faire AJAX avec AmplifyJS est un peu différent des autres bibliothèques: l’idée est d’abord de définir une connexion au serveur; vous pouvez ensuite utiliser cette connexion autant de fois que vous le souhaitez. Commençons par définir une connexion, appelée? Ressource? par AmplifyJS:

amplify.request.define ('pushData', 'ajax', url: 'data.php', tapez: 'POST');

Le premier paramètre est ici resourceId, que nous définissons comme? pushData ?; c'est ainsi que nous nous référerons à notre connexion lorsque nous l'utilisons. Le deuxième paramètre est le type de demande. dans ce cas, "ajax". C'est le seul type de requête intégré à AmplifyJS; vous pouvez ajouter les vôtres, mais cela convient aujourd'hui à nos besoins.

Enfin, nous avons un objet options. Selon la documentation, vos options de configuration correspondent à tout ce que vous souhaitez définir dans jQuery.ajax, aussi bien que cache (qui vous permet de configurer un cache de mémoire personnalisé) et décodeur (pour analyser la réponse AJAX). Dans notre cas, seules deux options sont nécessaires: la url, et le type de demande que nous faisons.

Bien sûr, nous aurons besoin de quelques PHP simples sur le back-end; assurez-vous que le Les données le dossier est accessible en écriture.

data.php

 

Maintenant, pourquoi ne pas utiliser la connexion, la ressource, que nous avons définie? Eh bien, faisons cela dans un gestionnaire de clic pour cela