Er lijkt elke week een nieuwe oogst aan JavaScript-bibliotheken met speciale doeleinden te bestaan. Het lijkt erop dat de dagen zijn dat er maar één bibliotheek per project wordt gebruikt. Vandaag zal ik je voorstellen aan een zeer coole componentbibliotheek, AmplifyJS, die slechts enkele zeer gespecialiseerde componenten biedt.
Volgens de website:
AmplifyJS is een set componenten die is ontworpen om veelvoorkomende webapplicatieproblemen op te lossen.
Klinkt prestigieus, maar wat zit er in deze bibliotheek??
AmplifyJS heeft drie belangrijke stukken:
Ga nu met me mee voor een rondleiding door de ongelooflijke AmplifyJS-bibliotheek! We gaan een supereenvoudige medewerkers-tracker bouwen; eigenlijk is het gewoon een tabel met een paar app-achtige functies, met (gedeeltelijk) dank aan AmplifyJS.
We hoeven ons vandaag niet echt bezig te houden met styling- en layout-problemen dus ik ga de Twitter Bootstrap-bibliotheek gebruiken. Het is ongelooflijk eenvoudig: neem gewoon de link
naar het CSS-bestand - waarmee ze u vanuit Github hotlinken - en u bent in zaken.
Maak dus een projectmap. Begin met de index.html
bestand en a js
map. Ga nu naar de AmplifyJS-website en klik op die grote, rode download? knop. Eenmaal heb je de bibliotheek zip, pak het uit en verplaats het naar de js
map. We zullen nog een paar andere dingen nodig hebben:
bootstrappen-modal.js
: De Twitter Bootstrap-bibliotheek bevat een paar scripts om alle interacties te krijgen. En we gaan er een gebruiken: de jQuery-plug-in voor het modale venster. Download het en voeg het toe js
map.Start dan onze index.html
bestand als dit:
AmplifyJS commando's
werknemers
Als je niet bekend bent met het gebruik van Twitter Bootstrap, zul je zien dat het geen zweet is om te gebruiken. We hebben een houder
dat is 940px breed. Dan hebben we er twee rij
s. De eerste heeft één kolom die alle 16 kolommen omvat. De andere heeft twee kolommen: één is 4 kolommen breed en één is 12 kolommen breed.
Nog een ding, voordat we een echte codering krijgen: we zullen een modaal venster openen dat inputmedewerkers toestaat. Onder de Oké, we zijn klaar om te gaan! Laten we coderen. Open een We gebruiken de Bootstrap modale plug-in hier; dit maakt gewoon een indruk? het modale venster. Nu willen we dat het venster wordt weergegeven wanneer we op? Toevoegen werknemer klikken? knop. Natuurlijk moeten we eerst de knop toevoegen: plaats dit in de Dat Dus, de gebruiker moet het formulier invullen, klik dan op? Toevoegen? knop met een id van We krijgen het formulier en verbergen vervolgens het modale venster. Dan gaan we bellen Maar wacht, u zegt wat er is Je wilt er een scripttag voor gebruiken samen met de anderen. Best simpel, toch? We maken gewoon een letterlijk object met onze parameters en voegen er een toe Deze methode hoeft niet te weten of een ander deel van onze code iets wil doen met elke nieuwe werknemer die we creëren; Onze? Toevoegen? button event handler hoeft zich daar geen zorgen over te maken. We publiceren het gewoon als een? Employee-created? evenement voor elk onderdeel dat geïnteresseerd is om te nemen. We geven ons nieuwe werknemersobject door als gegevens voor iedereen die geïnteresseerd is. Vervolgens retourneren we het werknemersobject (ook al houden we het niet bij in onze gebeurtenishandler). Zo, is een ander deel van onze app geïnteresseerd in de? employee-created? Ja, in feite. We willen twee dingen doen. Voeg eerst deze medewerker toe aan een tabel op onze pagina. Ten tweede willen we de medewerker opslaan in localStorage. Dit is het eerste deel daarvan: Om te abonneren op een evenement, bellen we Wat is hier aan de hand Nu moeten we deze tabel vastleggen als een variabele in onze En Het is een beetje ingewikkeld, maar je zou geen probleem moeten hebben om het te spelen. We hebben een Deze micro-API maakt het gemakkelijk voor ons om met onze tafel te werken. Je zou moeten kunnen zien hoe een array wordt doorgegeven aan de Oh, dan is daar de '+ bericht +' Zoals je kunt zien, voegt dit gewoon gewoon een Maar dat is niet de enige die we willen doen als de? Employee-created? evenement vindt plaats: Maak bovenaan met onze twee andere variabelen de derde en laatste variabele: Nu gebruiken we de opslagcomponent van AmplifyJS. Het kan echt niet eenvoudiger: om een waarde op te slaan, door te geven Dus hier voegen we een nieuwe medewerker toe aan de array en slaan we de array op in de? Medewerkers? sleutel. Ik moet er rekening mee houden dat, aangezien we een array opslaan, AmplifyJS JSON-serialisatie gebruikt om die array naar een string te converteren. Daarom, als u browsers probeert te ondersteunen zonder native JSON-ondersteuning (IE 5 en lager, Firefox 3 en lager), wilt u de json2.js-bibliotheek opnemen. In ons kleine app-voorbeeld zeggen we dat de gegevens die u in de app zet, standaard alleen op uw computer worden bewaard (in die ene browser). Als de gebruiker dat wil, kunnen we ze echter op de server zetten (dit is waarschijnlijk privéinformatie die ze misschien niet willen delen, maar als ze deze vanaf andere apparaten willen openen, kunnen ze dit doen. ). We beginnen met het toevoegen van een knop voor het uploaden van de gegevens. Nu, natuurlijk, hebben uw briljante geesten er al achter dat we de AJAX-component van AmplifyJS zullen gebruiken. AJAX doen met AmplifyJS is een beetje anders dan bij andere bibliotheken: het idee is dat u eerst een verbinding met de server definieert; dan kunt u die verbinding een aantal keer daarna gebruiken. Laten we beginnen met het definiëren van een verbinding, een? Resource? door AmplifyJS: De eerste parameter hier is Ten slotte hebben we een optievoorwerp. Volgens de documentatie zijn je instellingenopties alles wat je zou instellen Natuurlijk hebben we wat eenvoudige PHP aan de achterkant nodig; zorg ervoor dat de Hoe zit het met het gebruik van de verbinding, de bron, die we hebben gedefinieerd? Laten we dit in een click-handler doen Bij gebruik van de resource is de eerste parameter de resource-ID; het is dezelfde resource-ID, we hebben de resource die we hebben gedefinieerd, dus AmplifyJS weet welke te gebruiken. Ten tweede geven we gegevenshash door. In dit geval geven we de inhoud door in onze winkel, onder de sleutel? Medewerkers.? De laatste parameter is een functie die wordt aangeroepen wanneer we een reactie ontvangen. Zodra we een reactie hebben ontvangen, publiceren we de? -Geduwde? evenement. Vervolgens waarschuwen we de gebruiker dat het werkte: Nou, dat is onze kleine voorbeeld-app. We hebben gekeken naar het gebruik van alle drie de AmplifyJS-componenten: Dus, wat zijn uw gedachten over AmplifyJS? Het leuk vinden? Vind je het te overbodig? Laten we het horen in de reacties!Voeg een werknemer toe
Stap 2: Bedrading van het Modal-venster
script
label onderaan index.html
(Ik doe dit alleen inline, maar voel me om het in een nieuw JS-bestand te plaatsen). begin op deze manier: (function () var employeeModal = $ ('# add-employee-modal'). modal (backdrop: 'static'); ());
.
data-controles-modale = 'add-medewerker-modale'
attribuut toont het modaal met die ID wanneer op de knop wordt geklikt.create-werknemer
. Laten we een klikgebeurtenishandler voor de knop indraaien:$ ('# create-employee'). click (function () var form = $ ('# employee-form'); employeeModal.modal ('hide'); EMPLOYEE.create (form.find ('[name = voornaam]]) val (), form.find ('[naam = achternaam]'). val (), form.find ('[naam = rol]'). val ()); form.find ('input ') .val ("););
EMPLOYEE.create
methode, waarbij de voornaam, achternaam en rol als de drie parameters worden doorgegeven. Ten slotte wissen we het formulier.amplify.publish
EMPLOYEE.create
? Wel, het is een micro-? Klas? die ik heb ingebracht js / employee.js
. Bekijken:var EMPLOYEE = create: function (firstName, lastName, role) var employee = firstName: firstName, lastName: lastName, role: role, dateEmployed: new Date (); amplify.publish ('employee-created', medewerker); terugkeer medewerker; ;
Datum in dienst
eigendom. Maar dan - en tot slot! - hebben we de eerste toegang tot het AmplifyJS-raamwerk. Hier gebruiken we de component pub / sub-evenementen. Dit is geweldig om losse koppelingen tussen delen van uw app te maken.
Stap 3: Reageren met
amplify.subscribe
amplify.subscribe ('employee-created', function (employee) employeeTable.add ([employee.firstName, employee.lastName, employee.role, employee.dateEmployed]); newAlert ('success', 'New Employee Added') ;);
amplify.subscribe
. We willen abonneren op de? Employee-created ?; wanneer die gebeurtenissen plaatsvinden, willen we deze toevoegen aan de employeeTable
; merk op dat in plaats van alleen het doorgeven van de werknemer
object, wij? converteren? het naar een array; dit komt omdat we er zeker van moeten zijn dat de elementen in de juiste volgorde staan. Vervolgens willen we een bericht weergeven, zodat onze gebruiker weet dat de medewerker succesvol is toegevoegd.employeeTable
variabele? Nou, eerst moeten we het toevoegen naar ons document. Dus, onder onze? Medewerkers?
, Voeg dit toe:
Voornaam Achternaam Rol Datum in dienst var
verklaring bovenaan:employeeTable = TABLE.create ($ ('# employee-table')),
TAFEL
? Dat is het laatste stukje JS voor deze puzzel. Zet dit erin js / table.js
en vergeet de script-tag niet:var TABLE = proto: init: function (el) this.element = $ (el) .find ('tbody'); , voeg toe: function (arr) var row = $ ('
') .html (function () return $ .map (arr, function (value) return' '+ waarde +' '; ). join (");); this.element.append (row);, load: function (rijen, volgorde) for (var i = 0; rows [i]; i ++) this.add ( rijen [i]); var fields = []; for (var j = 0; order [j]; j ++) fields.push (rijen [i] [bestel [j]]); this.add (velden );, clear: function () this.element.empty ();, create: function (el) var table = Object.create (this.proto); table.init (el); retourtabel; ; proto
eigenschap die het prototype is voor onze tabelinstanties. Dan, als we bellen creëren
, we gebruiken Object.create
om een object te maken dat erft van this.proto
. Daarna noemen we de in het
methode om eigenschappen in te stellen. Ten slotte retourneren we de tabelinstantie. toevoegen
methode voegt een rij toe aan onze tabel. Merk ook op dat we een reeks rijen kunnen doorgeven aan laden
en vul de tabel op; we zullen dit binnenkort gebruiken.newAlert
methode die we hebben genoemd:function newAlert (type, bericht) $ ('# alert-area'). add ($ ('
div
binnenstebuiten div
maakt gebruik van de Twitter Bootstrap alert-styling; na twee seconden vervagen we de waarschuwing en verwijderen deze. amplify.store
employeeStore = amplify.store ('employees') || [];
employeeStore
. Als amplify.store (werknemers)
geeft iets terug, we zullen dat gebruiken; anders gebruiken we een lege array.amplify.subscribe ('employee-created', functie (werknemer) employeeStore.push (medewerker); amplify.store ('employees', employeeStore););
amplify.store
een sleutel en de waarde. Haal de sleutel over om de waarde op te halen. Daaronder slaat AmplifyJS die sleutel en waarde op in welk opslagtype dan ook beschikbaar is in die browser.
Stap 4: Opslaan naar de server (met
amplify.request
)
amplify.request
is een ongelooflijk flexibele API, en we zullen niet alles bekijken wat het kan doen. U krijgt echter een goed idee van hoe het hier werkt.amplify.request.define ('pushData', 'ajax', url: 'data.php', type: 'POST');
RESOURCEID
, die we instellen als? pushData ?; dit is hoe we naar onze verbinding verwijzen als we deze gebruiken. De tweede parameter is het verzoektype; in dit geval,? ajax.? Dit is het enige verzoektype dat is ingebouwd in AmplifyJS; u kunt uw eigen toevoegen, maar dit is geschikt voor onze behoeften van vandaag.jQuery.ajax
, net zoals cache
(waarmee u een aangepaste geheugencache kunt instellen) en decoder
(voor het parseren van het AJAX-antwoord). In ons geval zijn slechts twee opties nodig: de url
, en de type
van het verzoek dat we doen.gegevens
map is schrijfbaar.data.php
:
$ ('# push-data'). click (function () amplify.request ('pushData', employees: amplify.store ('employees'), function (data) amplify.publish ('geduwd met gegevens' ', data);););
amplify.subscribe ('data-pushed', function () newAlert ('success', 'Data successful to server'););
Nog een stap verder gaan
amplify.publish / amplify.subscribe
, amplify.store
, en amplify.request
. We hebben vrijwel alles wat er te weten valt over de pubsub en winkelonderdelen (daar is een beetje meer!), maar er is een lot meer kunt u doen met de aanvraag-API. Ga dus eens naar de website voor meer informatie!