, skabe en multi - side - side med meteor,,,,, 1,,,,,,,,, 22,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, som med en webapplikation, skabe flere side områder kræver et særligt sæt værktøjer.i denne artikel, vil vi se på at udvikle et bibliotek, der ikke blot kan skelne mellem de forskellige uri 'er, men en, der udnytter meteor er centrale elementer.,,,,, der er bestemt bibliotek træk, når jeg er nødt til at udvikle en specifik og målrettet bibliotek, som dette, jeg vil gerne begynde med resultatet af. - jeg vil have det til at fungere?så kan vi begynde med at skrive nogle af de elementer, som vi gerne vil have, er evnen til at laste forskellige sider i henhold til uri, læse parametre fra uri (placeholders), og at de sider, dynamisk som pr meteor standard, det ser godt ud.nu efter i disse forhold, kan du tror, de er ret svarer til en router »type bibliotek, og jeg er enig.så lad os se på, hvordan vores router "bibliotek ville gå i aktion:, router. addroute (» /hjem", "hometemplate) router. addroute (" /user /: brugernavn, profiletemplate) router. addroute (» /kontakt, contacttemplate '); router. run(); i design, har du begreber som "form følger funktion", der anvender den idé om alt, og at det senere. i kode, jeg ofte det modsatte er til større hjælp.vi som udviklere, kan arbejde i mange retninger og et eksempel på, hvad udformningen bør se ud, holder os målrettede og effektive. nu hvor jeg ved, hvad jeg vil gøre, det er blot et spørgsmål om at gennemføre det.så, lad os kigge på vores forhold, som vi har skrevet ovenfor, vi vil være i stand til at tilføje ruter og meteor gøre givet skabelon delvis.selvfølgelig, meteor synspunkter arbejde af styret er modeller som standard, så jeg har besluttet at gøre dette den pålydende værdi af vores router. fordelingen, lad os smadre projektet i flere afsnit, så vi ved, hvilke elementer, som vi skal arbejde med, vil vi begynde med at denne side er uri, som vi er nødt til at matche de ruter, mod noget.dette kan gøres, let nok ved, window.location.pathname, variable, forudsat af browseren. næste, vi skal have mulighed for at tilføje ruter.det er ganske enkelt, at vi har gjort et eksempel kode; vi har en funktion, der hedder, addroute, som vil acceptere en rute - og en skabelon navn.denne funktion skal opbevare alle disse objekter inde i en slags array rute. med den nuværende uri og en række ruter, oplagres, har vi brug for en eller anden form for metode for at se, om de passer. og sidst, men ikke mindst, er vi nødt til at tage en tilsvarende rute og vise sin vedlagte model.,, du kan se det, som om de krav, der virkelig bidrager til at effektivisere planlægningen.vi er nu klar til at hoppe i.,, om at komme i gang, lad os skabe en ny meteor - projektet, tager jeg til navn min ", routerdemo".nu er inde, vil vi skabe en folder, der hedder ", lib, i en mappe, der hedder" kunde ":, meteor skabe routerdemo cd routerdemo mkdir - p klient /lib, skabe et dossier, der hedder" router. js, i det nyoprettede, lib, mappe.grunden til, at vi holder fast i, kunde ", fordi den tjener ikke har adgang til, window.location.pathname, variabel og er som sådan ikke vil arbejde sammen med vores router.at lægge ting i en mappe, der hedder "kunde", sikrer de kun vil køre på den client-side. nu i, router.js, fil, du lige har lavet, lad os få nogle stilladser:, ////////////////////////////router //////////////////////////router = {uri: /* nuværende url * /, ruter: [...], addroute: /* funktion at tilføje en rute * /, getmatchingroute: /* funktion at få tilsvarende rute * /, løb: /* funktion at vise de matchede rute model * /}; jeg tror, at det er en god platform, jeg engang fyldt i koden for ruter system, og tilføjede visse bemærkninger (progress).nu til at videreudvikle vores bibliotek, er vi nødt til at drøfte, hvordan vi skal leve op til disse ruter.,, der svarer til ruter, det er ikke så enkelt som currentroute = = = vej, som vi har at gøre med dynamiske placeholders.vi ønsker en rute til, /user /: id, svarer til en uri ', /user /42, osv. for at gøre dette er vi nødt til at dele de uri og gøre lidt mere tilbundsgående analyse.visse folk tænker måske, at anvende en regex, men det er lidt overdrevet, hvis du spørger mig.en meget enklere fremgangsmåde ville være at opdele segmenter op og sørge for, at de to ruter har samme antal dele og også sikre, at de dele af den rute, som ikke placeholders, passer sammen. det kan let blive opnået ved at opdele de uri, hvor der er en skråstreg (» /« frem. ved hjælp af. - metode.så vores første check ville sikre, at de to ruter har samme antal dele. hvis ruten, /user /: id, og vi får en uri ', /profil /42 /fu /bar, og vi behøver ikke engang at gøre enhver yderligere kontrol, en har to segmenter, og den anden har fire, så det virker som en god første check.den næste ting, vi kan gøre, er at filtreres gennem de lister, og sikre, at hver enkelt stykker, der ikke er en indikation af en art tændstikker.hvis disse to kontroller er sandt, vi kender ruten tændstikker. med uri variabel, så lad os komme i gang med at, uri, variabel:, uri. _. compact vindue. sted. pathname. split ("/"), i ovennævnte kode, vi deler array den frem her, og at den snor i en række segmenter.så bruger vi understrege er, kompakt, funktion at fjerne enhver tomme enheder fra listen, de kunne være forårsaget af en frem og i begyndelsen eller, hvis man bruger to frem her ved en fejl.ved at gøre dette, er det vores system mere tilgivende. tilføjelsen af ruter, er vi nødt til at skabe den funktion at tilføje en vej, det er en nogenlunde den samme proces, men fordi vi skal tilpasse placeholders senere kommer vi til at opbevare ikke bare de segmenter, og modellen navn, men indeks for placeholders samt. her er afsluttet funktion:, addroute: funktion (rute, model) (var - segmenter = _. compact (rute. split ("/") var placeholders = _. reducere (segmenter, funktion (currentarr, stykke, indeks) (hvis substr (stykke. (0, 1) = = = ":") (currentarr. tryk (indeks); segmenter [og] = stykke. substr (1)} tilbage currentarr;} [...]); denne. ruter. tryk ({vej: segmenter, model: model, placeholderindexes: placeholders})}, starter vi med at opdele den rute i segmenter, ligesom vi gjorde med uri, men denne gang er vi også nødt til at opbevare fortegnelser over de placeholders for fremtiden ved hjælp af understrege, at reducere metode. for de uvidende, reducere funktion er lignende for hver metode, men også cyklusser gennem alle de elementer af en liste, forskellen er, at det går, som hver iteration vender tilbage til næste punkt på dagsordenen, i sidste instans returnerer resultaterne til den pågældende variabel.vi begynder med en blank system (det tredje parameter) og vi tilføjer hver indeks, som vi finder dem, og at det system med indtil det er vendt tilbage til det, placeholders, variabel. det næste, du ser her, er, at vi skal navngive segmenter, der er placeholders og fjernelse af tyktarmen.vi gør det rent æstetiske grunde og senere, vil det gøre det lettere at henvisning i skabelonerne. endelig, skubber vi den nye data til vores ruter system, som vi har skabt tidligere., der svarer til en rute til en uri, det næste skridt er at filtrere listen igennem og se på en rute, der matcher den nuværende uri. her er den fuldstændige funktion:, getmatchingroute: function() {for (var - jeg her. ruter) (var - rute =. ruter [i], var data = {}; hvis (route.segments.length = = =. uri. længde) (var - match = _. hver (route.segments, funktion (iso, i) (hvis (_. indeholder (route.placeholderindexes, jeg)) (data [seg] =. uri [i]; tilbage.} andre {tilbage seg = = =. uri [i]}} denne); hvis (op) (afkast (data: data, model: route.template}}}} //ingen tændstikker (tilføje 404 eller misligholdelse skabelon, måske?tilbage til falske}, gør vi ganske mange ting her, så lad os gå gennem den.vi begynder med at cykle gennem den vifte af ruter, og vi tildeler den nuværende vej til en variabel, sammen med en tom data objekt til at opbevare placeholders. næste, vi har den første kontrol af at sørge for, at de to ruter har samme antal segmenter, ellers er vi bare cyklus i den næste vej.hvis de vil have det samme antal komponenter, er vi nødt til at undersøge, om de segmenter kamp, kan dette gøres ved hjælp af understrege er, _. hver 'funktion.denne funktion er igen som ", _. hver enkelt," metode, bortset fra at det returnerer en boolean.hvordan det virker, er det, de vil fungere for hvert punkt i nettet, hvis de vender tilbage, den funktion, vil vende tilbage, ellers vil det igen forkert, så det er perfekt for at gøre ting som dette, hvor det er nødvendigt at kontrollere hvert enkelt segment. nu regningen, som vi udfører, er ret let, hvis det er en indikation af en art, der automatisk er en indikation af en art, som kan være lig med en merværdi.hvis det ikke er en indikation af en art, vi bare sørg for, at de to segmenter, match, ret simpelt., for at kontrollere, om det er en indikation af en art, vi giver den nuværende segmenter indeks (opbevaret i ","), til at understrege er, _. indeholder, funktion, som vil undersøge dens værdi. nu kan man undre sig over, hvad den første linje i denne ", hvis udtalelse gør, det er lagring af segmentet i data system under de givne indikation af en art navn.så siger f.eks. du havde en rute, /user /: navn, og det nuværende uri er "/user /bob, så denne linje vil tilføje en ejendom til data objekt, kaldet" navn, og give det en værdi af, bob. resten er ret indlysende, vi vedtager, er rigtigt eller forkert, afhængigt af omstændighederne, og resultatet bliver opbevaret i "kamp".hvis kamp er sandt, vi aflevere data sammen med de skabeloner navn, og hvis der var ingen match, vi vender forkert.og det er det for vores getmatchingroute metode. så langt, vi kan komme den nuværende uri, kan vi tilføje ruter, og vi kan finde en tilsvarende rute, står der kun tilbage at vise den rette vej, og det er vi nødt til at skrive "løb" metode, viser, at skabelonen, meteor bruger styret for skabeloner og lagrer alle modeller i en variabel, der er behørigt ved navn, "model".nu, hvis du er bekendt med styret, så disse modeller er funktioner, og ved at kalde dem (eventuelt går i nogle data), vi kommer tilbage med den model er html. nu, at disse funktioner for at få modellen er html vil fungere godt, men det er ikke en meteor, som vi vil ender med, er en normal statisk websted.heldigvis, idet det i den dynamiske opførsel er lettere, end du tror, vi skal gøre, er at afslutte den funktion i et ", meteor. gøre, ringe.sætte det ind i denne funktion vil gøre det reagere på ændringer i data - og holde det "live". de løb metode, fordi det, der løber routeren er meget enkel, lad os skabe løb metode:, løb: function() (var - rute =. getmatchingroute(); hvis (vej) (var - fragment = meteor. gøre (function() (hvis (model [rute. model].= = udefinerede) {tilbage model [rute. model] (rute. data)}}); dokument. lig. appendchild (del);} andre (//404), starter vi med at få de matchede rute med, getmatchingroute, funktion, som vi skrev bare, vi må sørge for, at der der er en kamp, og vi bruger en, ellers erklæring til at håndtere med 404., i hvis erklæring opfordrer vi meteor.render, og indenfor, vi undersøger og kalder tilbage skabelon, der passerer med data fra placeholders.denne funktion vil vende tilbage en html fragment, som så kan vi kun vedlægges dokumentet krop. så med ca. 60 linjer kode, vi har afsluttet vores router., afprøvning af det, det næste skridt er at teste det.jeg vil bruge de samme regler, som vi skrev allerede da vi planlagde dette projekt, da det vil være en god målestok for, om vi har opnået det, vi ønskede at opnå.lad os tilføje en fil ved navn, main.js, indenfor, klient, servietter og tilføje følgende:, meteor. startkapital (function() {router. addroute (» /hjem "," hometemplate) router. addroute ("/user /: brugernavn, profiletemplate) router. addroute (" - kontakt "," contacttemplate) router. run().}), i ovennævnte kode, vi først skal sørge for, at vores modeller og krop vil være til rådighed, før vi forsøger at arbejde med vores router.det gør vi ved at pakke alle vores kodeks inde i den, meteor.startup, metode.This will ensure everything is ready, and inside of the ,startup, method, we can then add our routes and run the router.,Creating Our Templates,Now let's create a couple of templates, this can be done anywhere, you can create a subfolder inside the ,client, folder named templates and create a separate HTML file for each, but since these will be short templates and just for example purposes, I am going to put them together inside a file named ',templates.html,' inside the ',client,' folder:, <template name="homeTemplate"> <h1>This is the Home Page</h1> </template> <template name="profileTemplate"> <h1>Profile Page</h1> <p>Welcome back {{username}}</p> </template> < skabelon navn = "contacttemplate" > < h1 > kontakt (< /h1 > < p > kontakt mig på twitter på {{twittername}} < /p > < /skabelon > den første model er ret grundlæggende, det indeholder en lille http: //kode for hjemmeside er på vej.den anden model er meget lig den første model, men denne gang er vi bruger, brugernavn, route parameter.den sidste skabelon anvender også en indikation af en art, men dets rute ikke har, twittername, segment.det er fordi standard meteor placeholders stadig vil arbejde og arbejde på opfordring,., ind, en kunde, servietter, lad os nu skabe et dossier, der hedder ", skabeloner. er, at erklære kontakt indikation af en art., template.contacttemplate.twittername = funktion () (). setdefault ('twitter_name", "@ gabrielmanricks'); tilbage. kom ('twitter_name)}, du kunne bare have sendt en snor, men jeg ønskede at vise, at alt stadig er reaktive.det sidste skridt er at slette misligholdelse html og er filer fra roden directory (i mit tilfælde er opkaldt routerdemo.html og routerdemo. j 'er) med det gjort, start meteor - server og navigere for det pågældende ruter. prøv at, /home "eller", bruger - /gmanricks, eller - kontakt, og de skal alle arbejde for dig som forventet.en anden ting er, at da vi oplagrede twitter - navn i møde, vi kan bare åbne browser er konsol på den kontakt, side og træde:, s. ('twitter_name "," @ nettuts "), og de vil se, at den side vil opdatere i realtid.,, smdrg., i denne artikel, vi byggede en grundlæggende router bibliotek, og samtidig giver det en meteor twist.vi har dækket en del af de centrale begreber, og det viser sig, at mange nye begreber som f.eks. til sidst håber jeg, at jeg fik det budskab, at der ikke er nogen reel "magi", der foregår her.det handler om gennemførelsen af, hvad du har brug for, i modsætning til, hvad du kan. tak for at læse, jeg håber du har nydt det.som altid, hvis du har spørgsmål, kan du lade dem under eller spørge mig om nettuts irc eller på min twitter.,,, note:,, hvis du er interesseret i at lære mere om en meteor, jeg har lige løsladt i min nye bog, som indeholder nærmere oplysninger om opbygningen af en app fra dets undfangelse & planlægning at sikre & her.du kan pick - up bog i begge ebook format samt bind fra amazon.
at skabe flere
Previous:der kræves javascript læsning
Next Page:tegning med to. er