Intro til Dart: Lage en Marquee

Intro til Dart: Lage en Marquee
en
Del
4
Del
Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

I denne opplæringen, vil jeg introdusere deg til Dart og hvordan du kan begynne å bruke det. I løpet av artikkelen vil vi bygge en enkel Javascript-basert image marquee uten å skrive en eneste linje med javascript - bare Dart


. Merk: Denne opplæringen ble opprinnelig publisert I mars 2012 som en freebie for våre Facebook-fans. Siden Activetuts + har nå stengt ned, vi gjør det gratis for alle lesere.


Prosjekt Forhåndsvisning

Vi skal bygge følgende enkle telt, et skjermbilde som er vist nedenfor . Klikk på bildet for å lansere en fungerende eksempel på prosjektet


Trinn 1:. Installer Dart Editor

La oss komme i gang å bygge ut litt telt. Herfra ut, vil vi være mye mer hands-on, og jeg skal ta deg tid til å forklare nye ting underveis

En ting om gangen.; vi kan skrive Dart i noen gamle tekstredigeringsprogram, egentlig, men den mest praktiske måten å komme i gang og til umiddelbart å kjøre prosjektet i en nettleser (via Javascript kompilering) er å installere Dart Editor.

Hodet til http : //www.dartlang.org/docs/getting-started/editor/, som skal automatisk oppdage OS og viser deg den riktige koblingen. Det er ikke en liten nedlasting, rundt 65 MB på dette skriftlig, så få det i gang før du fortsetter å lese.

Dart Editor er heller bare-bones. Det er bygget på Eclipse, og jeg håper at etter hvert vil det bli tilbudt som en Eclipse plug-in for dem med en eksisterende Eclipse installasjon. Men for nå, er det en selvstendig Eclipse modifikasjon som gjør Dart og ikke mye annet.

Det tilbyr noen av funksjonene som Eclipse arbeidsområder vanligvis tilbyr, for eksempel språkbevisst ferdigstillelse. Den store fordelen det bringer, men er en ganske enkel måte å starte og drive en Dart prosjekt.

Når nedlastingen er fullført, pakke ut ZIP-filen, og du vil ha en dart mappe. Du kan plassere denne hvor du vil; Jeg har flyttet meg til min Applications-mappen


Trinn 2:. Lag en Dart Prosjekt

La oss åpne opp Dart Editor program. Du finner det bare innsiden som dart mappen du nettopp pakket ut.

Når det lanseres, vil du bli presentert med en "Velkommen" side, som gir et startpunkt for noen prøveprosjekter. Dette er absolutt verdt å ta en titt, men vi hopper forbi dem for nå, og først få litt mer kjent med språket.

Gå til Fil-menyen og velg New Application ... eller klikk på øverste venstre ikon på verktøylinjen:

I vinduet som vises, skriver du inn et navn for prosjektet (jeg bruker DartMarquee). Det vil ønske å lagre prosjektet i en mappe som heter dart i hjemmekatalogen, men du kan endre dette ved å klikke på knappen Bla gjennom .... Legg merke til at uansett hvilken mappe du velger, vil Dart Editor oppretter en ny mappe i den valgte mappen, bruker navnet du har gitt for prosjektet. Innsiden av at det vil være noen filer som er opprettet for deg, også bruker navnet på prosjektet du følger med.

Også være sikker på "Web Application" er valgt, ikke "Server Application".
< hr> Trinn 3: Kjør Hello World Eksempel

Standard prosjekt som er opprettet for deg er en enkel Hello World eksempel. Du kan også se hva som skjer før vi begynner å bygge vår (litt) mer komplisert prosjekt. Kjør programmet ved å enten velge Verktøy > Kjør fra menyen, trykke på Kommando-R (Mac) eller Ctrl-R (PC), eller ved å klikke på den grønne "play" -knappen på verktøylinjen:

Du kan forvente at dette åpner opp i retten din nettleser, men - surprise! - Googles Chromium nettleser vil åpne (må ikke forveksles med Chrome, Chromium har en blå-ish monokrome ikon, ikke Chrome fargerike ikon). Krom har innebygd støtte Dart språket

Dette er ikke den prosessen jeg nevnte tidligere hvor Dart filene er kompilert inn Javascript.; dette er den Dart VM kjører regelmessig Dart-kode, som er kult, men ikke veldig nyttig for de av oss nå bygge Javascript-applikasjoner. Vi vil gjøre prosjektet kompilere til Script neste


Trinn 4:. Legg en Javascript-Launch

Hvis du endrer kjøre innstillinger, så vi kan få Dart å kompilere til Javascript. For å endre disse innstillingene, velger du Verktøy > Administrer lanserer ... menyen, trykker du på Kommando-Skift-M (Mac) eller Ctrl-Shift-M (PC), eller klikk og hold nedover pilen ved siden av Run verktøylinjen knappen, og velg Behandle lanserer ... fra pop-up menyen.

I vinduet som vises, vil du se standard lanseringen opprettet for deg, som har Chromium-ikonet. For å opprette en ny lansering, klikker du på det nye dokumentet ikonet, som vil vise en pop-up menyen.

Velg Dart Web Start fra menyen. I det øverste feltet til høyre, gi den et passende navn, som DartMarquee JS eller noe å utpeke at vi går for en Javascript-gjengivelse i en annen nettleser.

Under Launch Target, klikker du på Bla ... neste til HTML-fil :. Et vindu åpnes som presenterer alle (en) HTML-filer som finnes i prosjektet. Klikk på DartMarquee.html og klikk deretter OK.

Under Browser kan du velge å la standard sjekket, eller fjern merket det alternativet og angi en nettleser med Velg ... knappen. Nettleseren valget bør ikke saken for mye, selv om jeg skal bruke noen CSS3 triks slik en moderne nettleser ville være ideelt.

Klikk på Bruk og deretter på Lukk.

Nå kjører prosjektet på nytt, men denne gangen må du gjøre det ved å klikke og holde på Run verktøylinjen knappen, og deretter velge den nye lanseringen mål. Du skal nå få samme Hello World-programmet i nettleseren som du selv velger, som skal bruke Javascript samlet fra Dart. Faktisk, vil du se en ny fil dukke opp i fillisten: DartMarquee.dart.js. Dette er den kompilerte Javascript-fil.

Nå som du har kjørt den nye lanseringen en gang, vil fremtidige Kjører huske denne beslutningen og starte Javascript versjon.

Men vi er ikke ferdig ennå. HTML-filen er satt opp til å inkludere Dart filen, sammen med en annen Javascript-fil som tolker Dart-filer i nettleseren (som er super-kul, men ikke den beste for produksjon programmer). Vi trenger å redigere HTML-fil til å bruke den kompilerte Javascript-fil, ikke DART filer


Trinn 5:. HTML

Det nye prosjektet skal åpnes med DartMaquee.dart i hovedredaktør området . Vi får til det snart nok, men la oss komme i vår HTML side satt opp. Dobbeltklikk på DartMarquee.html i filen listen til venstre, og det vil åpnes i en ny fane i editoren.

Dart Editor er egentlig bare klar over Dart språk, som er så ille. Du vil merke at HTML-filen åpnes uten syntaks farge eller etterretning om språket. Det er god nok for vårt formål nå, men gjerne åpne denne filen (og noen andre ikke-Dart fil) i tekstredigeringsprogram som du velger. Vi vil ikke bruke for mye tid på ikke-Dart-filer, så jeg vil bare være å redigere dem i Dart redaktør for denne opplæringen.

Kroppen markup er ikke det vi ønsker, men først la oss oppdatere dem < script > koder som nevnt i det siste trinnet. Du kan slette den første < script > tagge helt; det er en gang som inkluderer Dart filen direkte. Slett denne linjen:
< script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>

(Hint: linjenumre er ikke aktivert som standard, men det er en av få alternativer tilgjengelig under Preferences)

Skriptet er den i nettleseren runtime for Dart.; man ganske kjekk funksjon er at du kan skrive Dart uten
kompilere den til Javascript, og har nettlesere kjøre det uansett. Du trenger bare å inkludere dart.js. Selvfølgelig, gjør dette for litt ekstra overhead og påvirker ytelsen. . Ganske kult triks, men

Nå skal vi endre de resterende < script > tag å laste vår kompilert Javascript-fil. Endre dette:
< script type = "application /dart" src = "DartMarquee.dart" > < /script >

Til dette:
< script src = "DartMarquee.dart.js "> < /script >.

Hvis du vil, kjøre prosjektet på nytt, og bruke den utvikler verktøy for å sikre at Javascript-fil lastes inn, og de to andre er ikke

Nå endring at < h2 > tag inn i en < div >, og gi det en id av telt
. < div id = "marquee" > < /div >

Du kan legge igjen < h1 > hvis du vil; noen ganger er det fint å ha siden identifisering.

Til slutt må vi lenker til en CSS-fil (som vi skal lage i neste trinn). I < head > legge til en < link > tag:
< link rel = "stylesheet" href = "DartMarquee.css" >

Programmet vil ikke fungere, fordi vi har fjernet < h2 > som ble angrepet av Dart-kode, for ikke å nevne at vi fortsatt trenger en CSS-fil. La oss gjøre det neste


Trinn 6:. CSS

Vi har koblet til en ikke-eksisterende CSS-fil, så la oss ta det. I Files området Dart Editor, høyreklikk og velg Ny fil. Fra menyen (du kan også finne ny fil ... i Fil-menyen)

I vinduet som vises, må du kanskje for å sikre at DartMarquee prosjektet er valgt i det midterste området. Deretter angir DartMarquee.css for filnavnet, og klikk på Fullfør.

Denne filen vil være klar til å redigere i hovedredaktør, men som med HTML-filer, er CSS-filer ikke intelligent støttet med syntaks av Dart Editor. Føl deg fri til å gjøre din CSS redigering i din foretrukne teksteditor. Eller, siden vi er egentlig ikke her for å gå dypere inn i CSS, bare kopiere og lime inn skjemaet nedenfor inn Dart Redaktør:
#marquee {width: 600px; høyde: 400px; background-color: # 111;} mainImage {høyde. 300px; background-color: # 666; posisjon. relative;} mainImage img {display: block; position: absolute; venstre: 0px; top: 0px; -webkit-overgang: opacity 0.6s ease-out; -moz-overgang: opacity 0.6s ease-out; -MS-overgang: opacity 0.6s ease-out; -o-overgang: opacity 0.6s ease-out; overgang. opacity 0.6s ease-out;} mainImage img.fade_away {opacity. 0;} thumbContainer {høyde: 100px; background-color:. #DDD;} knapp {width: 100px; høyde: 100px; background-color: #eee; position: relative; float: left;} knappen .border {width:. 90px; høyde: 90px; position: absolute; opacity: 0; border: 5px solid orange; -webkit-overgang: opacity 0,3 s ease-out; -moz-overgang: opacity 0,3 s ease-out; -MS-overgang: opacity 0,3 s ease-out; -o-overgang: opacity 0,3 s ease-out; overgang: opacity 0,3 s ease-out; markøren. pekeren;} knapp: hover .border {opacity: 0,5;} button.selected .border {opacity. 1;}

Igjen, vi er ikke her for å diskutere CSS. Jeg vil påpeke at jeg bruker CSS3-overganger for knappen svever og de viktigste bildet endres. Ellers bør det være ganske grei

Kjør prosjektet en gang til, eller rett og slett laste fra nettleseren.; på dette punktet vil det ikke være noen Javascript for å re-kompilere. Hvis du kjører fra Dart Editor, må du huske å bytte tilbake til HTML eller Dart fil; Dart Editor ikke vet hva du skal gjøre når du "Kjør" fra en CSS-fil.

Du skal se en stor mørk rektangel. Ser ikke ut som mye ennå, men du er på rett tack


Trinn 7:. Klar Images

En mer rengjøring oppgave, og det er å gjøre våre bilder lett tilgjengelig, slik at at vi kan se dem når vi er klar til å skrive denne koden.

I nedlastingspakken, finner du en mappe som heter bilder. Kopiere eller flytte denne mappen fra nedlastings arkivet til prosjektmappe, slik at sitter på samme nivå som de andre filene. Du vil sannsynligvis må bruke Finder /Explorer for denne oppgaven, som Dart Editor ikke (ennå) støtte importere eller dra-og-slipp av eksisterende filer. De vil dukke opp i listen over filer når du får dem på plass, skjønt.

Nå kan vi få inn noen Dart-kode. Det er neste


Trinn 8: The main () Funksjon

Åpne opp DartMarquee.dart filen i editoren. Du vil se tre hovedblokker kode:

Den tredje blokken er den viktigste funksjonen, og dette er en nødvendig del av Dart prosjektet. Dart vil se etter denne funksjonen som en inngangsport til gjennomføring. Kontrast dette med Javascript der skriptene bare utføres fra topp til bunn. Du kan sikkert gjenskape denne metodikken i Javascript, men den største forskjellen er at du ikke trenger å, og hvis du gjør det du må ringe main () selv; i Dart, er det forventet at du har den viktigste funksjonen, som det vil bli kalt for deg når Dart i klar til å begynne gjennomføringen av søknaden din.

Dette vil ikke være et utenlandsk konsept for deg hvis du har programmert i C eller Java, eller i Actionscript 3 og brukt dokumentklassen. Det fine med det er at det er en standardisert, forventet sted å begynne gjennomføringen av koden din


Trinn 9:. Klassene

Dart bringer med seg riktige klasser, som du kan ende opp foretrakk å Script klasse-ish-ness prototype system. Ta en titt på den andre blokken med kode i DartMarquee.dart. Dette er kjøtt av programmet akkurat nå, og er en klasse med to metoder deklarert. Vi skal nødlanding en stor del av denne koden. Vi skal gå inn på syntaksen som vi går, men for nå, hul ut denne klassen, slik at det ser slik ut:
klassen DartMarquee {DartMarquee () {}}

Hva dette går er klasse erklæring Hotell og konstruktør
. Klassen erklæring begynner med klassen, som er etterfulgt av navnet på klassen. At denne klasse er oppkalt DartMarquee er utelukkende en funksjon av templatet ble brukt i programmet opprett i DartEditor. Det er viktig å vite at nettopp fordi denne filen heter "DartMarquee.dart" betyr ikke at det må være en klassenavnet DartMarquee inne. Vi kommer ikke til å endre det, fordi det er fornuftig, men Dart er som PHP eller Ruby i at du kan sette så mange klassedefinisjoner som du liker i en enkelt fil, og navngiving trenger ikke å matche filnavnet (som det gjør i Actionscript).

Klassedefinisjonen blir så inneholdt mellom krøllparenteser. Innsiden av det, har vi en konstruktør. Dette er en funksjon som kjøres når et nytt objekt blir instansiert fra denne klassen. Vanligvis setter man setter opp koden på en konstruktør. Legg merke til at navnet på konstruktøren må samsvare med navnet på klassen, ellers er det ikke en konstruktør, og er en vanlig metode i stedet.

Alt annet du legge til en klasse bør gå i mellom de to klammeparentes . betegner klassen

Du vil merke at tilbake i den viktigste funksjonen, er en DartMarquee objekt instantiate med denne linjen.
ny DartMarquee () kjøres ();

Dette bør se ut som objekt -orientert Javascript. Den .run () så kaller kjøre metoden på den nylig opprettede objekt. Vi bare fjernet denne metoden, så gå videre og endre den linjen til dette:
nye DartMarquee ();


Trinn 10: Import

Noe jeg er ganske begeistret med Dart, som noen kommer fra Javascript, er muligheten til enkelt å importere og bruke annen kode inn i prosjektet. Den første blokken av vår standardkoden bruker en enkelt import uttalelse:
#import ('dart: html');

Dette importerer en innebygd Dart bibliotek, en som omhandler spesifikt med HTML-sider og gir oss tilgang til DOM manipulasjon funksjonalitet. Vi kommer til å importere andre bibliotek som vi trenger dem, inkludert en som vi skal skrive selv.

Når vår Dart Prosjektet er utarbeidet for å Javascript, er alle de uensartede Dart kode konvertert og sammensatt i en enkelt Javascript fil. Det er smart nok til å ikke inkludere det samme biblioteket to ganger, slik at du kan importere biblioteker fra andre filer og ikke bekymre deg for dem i konflikt med eller duplisere kode i det endelige produktet.

Vår DartMarquee.dart filen skal se omtrent slik ut nå:
#import ('dart: html'); klasse DartMarquee {DartMarquee () {}} funksjonen main () {new DartMarquee ();}


Trinn 11: legge en eiendom til klasse

La oss endelig skrive kode. Vi kommer til å legge et mål eiendom til DartMarquee klassen, slik at hoved HTML element som vi refererer er nyttig innenfor klassen.

Like etter klasse erklæring, og før konstruktøren, legge til en Eiendommen som så:
klasse DartMarquee {Element _target; DartMarquee () {}}

Legg merke til syntaksen her: i stedet for var, bruker vi en datatype til både deklarere en variabel og gi den en datatype på en gang. Denne syntaksen minner om C og Java. Navnet på vår eiendom er _target, og linjen avsluttes med et semikolon. Du vil finne Dart mye mindre tilgivende om manglende semikolon.

En interessant ting om Dart type system er at det er valgfritt. Hvis du angir en type, vil Dart gjøre hva den kan for å holde seg til å skrive regler. Men vi kan også velge å forlate å skrive ut ved å skrive at eiendom som dette:
Var _target;

Dart vil da ikke forsøke å holde typer safe; vil du ha en dynamisk skrevet variabel akkurat som i Javascript. Hva er enda mer interessant enn det faktum at det er valgfritt, er at du kan blande sterk og dynamisk typing i samme kode.

Personlig, sterk typing er en av de tingene som trekker meg til Dart, som det er nyttig å ha den slags ansvarlighet. Dette vil være siste gang jeg nevner dynamisk typing i Dart.

Vi er ikke ferdige med denne egenskapen ennå. Dette er en viktig egenskap, så la oss sette den i konstruktøren.
klasse DartMarquee {Element _target; DartMarquee (this._target) {}}

Dette kan se litt uventet. Dette er en Dart idiom; det er så vanlig for en konstruktør å motta argumenter, og så bare bruke konstruktøren kropp å stash disse verdiene inn i egenskaper, som Google opprettet en snarvei

Normalt ser en metode parameter som du forventer det til.: alle variabelnavn vil gjøre, men ikke noe som ser ut som en eiendom på et annet objekt. Disse parameterne er normale parametere som du er vant til; de er tilgjengelige ved navn i kroppen av metoden.

Denne nye syntaks, men vil gå videre og tildele verdi sendt inn til denne parameteren til eiendommen utpekt av parameternavnet. Med andre ord, er koden ovenfor identisk med denne koden:
DartMarquee (mål) {this._target = målet;}

Bare vi slipper å skrive at standardtekst av en linje
Merk at denne snarveien er kun tilgjengelig i konstruktører


Trinn 12:. DOM spørringer

Nå som vi har et mål eiendom satt opp, må vi gi det en verdi. Tilbake i den viktigste funksjonen, må vi velge telt < div > og passerer det i til konstruktøren.

Dart gir en metode for å finne HTML-elementer av CSS utvalg, mye som jQuery eller noen av de populære Javascript-biblioteker gjøre. Dette er levert av at dart. Html bibliotek importert på toppen av filen, som også gir en topp-nivå dokumentet variabel som gir oss global tilgang til HTML-dokumentet

Oppdater den viktigste funksjonen til å se slik ut :
void main () {new DartMarquee (document.query ('# telt'));}

Det er så enkelt: Hvis du har brukt jQuery (eller et annet bibliotek), bør dette være ganske kjent. Bare ring document.query og passere i velgeren. Dart gjør resten


Trinn 13:. Console Logging

Hvis du har utviklet med Javascript, er sjansene du har gjort mye bruk av console.log å teste og verifisere koden din. Dart gir en utskriftsfunksjon som, når kompilert til Javascript, slår inn til en samtale for å console.log. La oss prøve det ut, og teste vårt prosjekt så langt på samme tid.

I DartMarquee konstruktør, la oss skrive ut _target eiendommen for å sørge for at det blir satt.
DartMarquee (this._target) {print (this._target);}

Og treffer Run. I nettleseren din, åpne opp konsollen og du skal se omtrent slik ut:

Legg merke til at på den tiden dette ble skrevet, er det en feil med Dart Editor som genererer en advarsel som sier at "print" er ikke en fremgangsmåte. Dette følges av Google, og vil trolig bli fikset snart, om ikke av den tiden du leser dette. Men hvis du ser den advarselen, bare overse den; det fortsatt kompilerer fint. Dette er et eksempel på blødning kanten som Dart står; utskrifts advarselen var ikke skjer når jeg begynte å skrive denne opplæringen, er det bare skjedd med den nyeste bygg av Editor (build 5104)


Trinn 14:. DOM Manipulation

Vi kommer for å skape den nødvendige HTML-elementer programmatisk, og plassere dem i vår målgruppe < div >. Dart gir et veldig rent API for denne type oppgave.

Først, la oss lage noen flere egenskaper for å holde noen av elementene. Legg disse rett under den første egenskapen du la til:
klasse DartMarquee {Element _target; DivElement _mainImage; DivElement _thumbContainer; DartMarquee (this._target) {

Legg merke til hvordan vi bruker understrek som prefiks? Ikke bare dette en vanlig konvensjon når navngi private eiendommer, er det faktisk idiomatisk Dart. En understrekning prefiks gjør eiendommen (eller metode, eller klassen selv) private. Ellers er det offentlig.

Legg også merke til hvordan vi har skrevet dem som DivElement? En annen fin funksjon av Dart (som minst for web) er at det gir klasser for de enkelte HTML-elementer, i motsetning til den mer generell tilnærming vanligvis tatt i Javascript. Resultat er at enkelte elementtyper har de riktige egenskapene, så det er lett å manipulere dem med Dart. For eksempel, Image har en src eiendom som kan være trygt og enkelt nås direkte med Dart å endre bildets kilde.

La oss nå lage disse elementene. I konstruktøren:
DartMarquee (this._target) {_mainImage = new Element.tag ('div'); _mainImage.classes = ["mainImage"]; _thumbContainer = new Element.tag ('div'); _thumbContainer.classes = ["thumbContainer"]; target.nodes.add (_mainImage); target.nodes.add (_thumbContainer);}

Det er mye som skjer her; la oss bryte det ned.

Først lager vi en ny DivElement. Men legg merke til at vi ikke skrive ny DivElement som du kan forvente (og tro meg, jeg forventet det, og fortsatte å forvente at for en god stund før jeg oppdaget riktig teknikk). Selv om DivElement er en klasse, det har ikke en konstruktør som du kan få tilgang til. I stedet bruker du en oppkalt konstruktør
på Element klassen for å skape et element av en bestemt type.

Navngitte konstruktører er bare forskjellige konstruktører (type som metode overbelastning, men det er egentlig ikke så ) som kan gi et annet grensesnitt til konstruksjonen. I dette tilfellet, kan vi angi ved strengtypen element. Du kan også skrive nye Element.html ('< div > ... < /div >'); å skrive ut HTML i string format. To ganske ulike tilnærminger, så vi har to konstruktører.

Når vi har vår _mainImage DivElement, vi setter sin klasse. Elementet klasser egenskap som lar oss få tilgang til de ulike klassene som kan anvendes. I dette tilfellet er det et helt nytt element, slik at eiendommen er tom. Vi setter den til en enkelt klasse navn, "mainImage".

Du kan forvente klasser for å være en Array (eller List, i Dart språkbruk), men det er faktisk en Set. Et sett er lik en Array i at det er en samling av uavhengige verdier, men den største forskjellen er at samlingen er uordnet
; det er ingen garanti for at rekkefølgen på de inneholdt verdier vil være noe spesielt, eller til og med den samme hver gang. Dette har en liten forgrening i hvordan vi jobber med klasser eiendommen, men for nå er det en enkel tilordning til det som ser ut som en Array inneholder en enkelt streng.

De neste to linjene gjentas nesten ordrett, bortsett fra at vi kan dess tildele _thumbContainer eiendom, og tildele en annen klasse.

De siste to linjene legge disse nye elementene til DOM, spesielt til målet div. Som du kan se, er det en noder eiendom på Element, som som du forventer er en liste over underordnede elementer. Å være en liste (eller Array), kan vi bare legge til (ligner på Javascript push) et element i den. Og på dette punktet, er elementene i DOM

Gå videre og kjøre prosjektet igjen.; fordi vi har lagt klasser til den nye < div > s, og vi har vår CSS-filen klar til å gå, bør du se en liten endring til side:


Trinn 15: Loading JSON
< p> Vi trenger noe av innholdet, ikke bare grå bokser på å lete. Vi kjører vår lille telt med en JSON-fil, så la oss se på hvordan vi gjør en HTTP-forespørsel i Dart.

Først, la oss lage JSON-fil. Det vil være ganske enkel, og bør ikke trenge noen forklare i og for seg selv. Opprett en ny fil i Dart prosjektet (Fil > New File ...) og gi den navnet marquee.json. Legg til følgende innhold: product: {"bilder": ["scottwills_machinery3.jpg", "scottwills_machinery4.jpg", "scottwills_machinery5.jpg", "scottwills_machinery6.jpg", "scottwills_machinery7.jpg", "scottwills_machinery8.jpg"] }

Lagre, og vende tilbake til DartMarquee.dart. Vi vil legge til koden for å laste denne filen i konstruktøren, etter at vi har laget våre ekstra Elements
XMLHttpRequest forespørsel = new XMLHttpRequest ();. String url = 'marquee.json'; request.open ("GET" , url, true); request.on.load.add (onJSONLoad); request.send ();

Og det er hvordan du gjør det

Å, ja vel, en liten forklaring.. Først oppretter vi et XMLHttpRequest objektet. Som vil håndtere lasting av data (og vil også håndtere sending av data om vi gjorde den slags ting). Den neste linjen er litt overflødig, men jeg ønsket å vise en annen variabel blir opprettet. Legg merke til at String typer kan lages med sitatet bokstavelig, akkurat som i Javascript (og omtrent alle andre språk). I Dart, er det ingen forskjell mellom en- og doble anførselstegn, i motsetning til PHP eller Ruby.

Neste vi begynne å jobbe med XMLHttpRequest objektet. Først vi åpne tilkoblingen, passerer i metoden ("GET"), url vi nettopp opprettet, og til slutt at vi er interessert i en asynkron forespørsel (sant). Det betyr at vi må legge til en hendelse lytteren å vite når lasten er fullført. Det bringer oss til den mest interessante linje:
request.on.load.add (onJSONLoad);

Dette er Dart arrangement modell. Objekter som ekspedere arrangementer har en på eiendom som fungerer som "event sentral", hvor du kan gå til å planlegge din neste fest. Det vil også være eiendommer på på objektet som svarer til de ulike arrangementer utsendt av det aktuelle objektet; i dette tilfellet, er belastningen en av hendelsene. Hver av disse hendelsesegenskaper er egentlig en samling av lytterne, som vi kan legge til en ny lytteren (onJSONLoad i dette tilfellet, og dette har ikke blitt skrevet ennå i tilfelle du lurte).

Denne syntaksen tok en litt tid å venne seg til, men nå er jeg virkelig liker det. Det er tryggere og renere enn request.addEventListener ("last", onJSONLoad), ville ikke du enig

Den siste linjen i vår forrige kodeblokken bare setter forespørsel i bevegelse; sende den av å få våre data.

For at dette skal fungere, trenger vi en onJSONLoad funksjon. La oss begynne å gjøre det neste


Step. 16: Metoder og tilstelninger Lyttere

Nå får vi til å skrive en ny metode. Denne metoden også skjer for å være en hendelse lytteren (for XMLHttpRequest vi satt opp i det siste trinnet), men uansett syntaksen er den samme. Finn et sted i DartMarquee klassen som er etter utgangen av konstruktøren men før utgangen av klassen - det skal være mellom to avsluttende tannregulering. Legg til følgende:
annullere onJSONLoad (Hendelses e) {print ("onJSONLoad");}

Syntaksen bør være ganske opplagt. Det følger eiendommen /variable syntaks, ved at vi har erstattet Javascript funksjon søkeord med en datatype. Den datatype er en type av verdien som returneres av funksjonen. I dette tilfellet er ugyldig faktisk mangel
av type, som funksjonen ikke returnerer noe. Og i likhet med egenskaper, kan du eventuelt forlater metode utypet og bruke funksjonen søkeord i stedet for en type.

Nå kan vi prøve ut programmet. Kjøre den på nytt, og kontroller konsollen. Du bør få beskjed om at vår funksjon har kjørt, noe som betyr at JSON-filen er lastet


Trinn 17:. Riktig Bound "dette"

La oss ta en pause i handlingen for et øyeblikk å snakke teori. Ikke bekymre deg, du vil lære noe viktig underveis.

I koden som vi nettopp skrev legge til en hendelse lytteren, er vårt arrangement lytteren skikkelig bundet til omfanget av objektet den tilhører. I Javascript, dette være bundet til objektet som sendes hendelsen. Det vil si, hvis du skriver dette i Javascript:
myElement.addEventListener ("klikk", onClick); funksjon onClick () {console.log (denne); }

Så dette refererer til myElement, objektet gjør arrangementet forsendelse. I Dart, men dette vil referere til objektet som lytteren hører. Prøv det; endre trykk til dette:
void onJSONLoad (Hendelses e) {print (denne);}

Og kjøre den på nytt. Du bør se denne:

OK, som ikke akkurat bevise ting veldig bra. [objekt Objekt] kunne være noe. La oss ta en rask titt på en nyttig triks for å gjøre klassene beskriver seg selv.

Legg til en metode for å DartMarquee kalt toString. Denne metoden skal returnere en streng og tar ingen argumenter
String toString () {return "DartMarquee";}

Kjør det en gang til, og nå du ender opp med dette.

Dette bør illustrere at "dette" refererer til DartMarquee objektet. Java ikke oppfører seg på denne måten, uten omveier. Det betyr at du ikke trenger å bekymre deg for å binde funksjoner til sitt virkeområde når du legger hendelsen lyttere, slik som med jQuery er bind metode og andre lignende løsninger


Trinn 18:. Generics

La oss gå på og analysere vår JSON nå som JSON-filen er lastet. Vi kommer til å analysere den og stappe disse webadressene til en eiendom, så først la oss trave tilbake til toppen av klassen og legge en _urls eiendom:
Element _target; DivElement _mainImage; DivElement _thumbContainer, List < String > _urls;

Denne syntaksen vil se rart hvis du ikke kommer fra Java. Variabelnavnet er _urls, og datatype er List < String >. Vi kunne bare skrive Listen _urls, og det ville fungere, men vi kan også dra nytte av noe som Dart gir. Tilbake mot begynnelsen, beskrev jeg rei & filig; ed generika
, og < String > en del av datatype er det generiske. Det vil si at elementer innen Listen er skrevet som Strings. Poenget med dette trinnet er ganske mye å innføre denne syntaks. Vi får se det igjen snart.

Hvis du har programmert Actionscript 3, finner du den syntaks som vektorer, og faktisk Dart Lister og AS3 vektorer er i hovedsak de samme.
< hr> Trinn 19: Parsing JSON

Nå la oss komme til analyse. Fjern utskrifts uttalelse fra onJSONLoad og legge til denne:
annullere onJSONLoad (Hendelses e) {XMLHttpRequest forespørsel = e.target; Kart < String, Objekt > Resultatet = JSON.parse (request.responseText); print ("JSON:" + resultat); int i = 0; _urls = resultere ['bilder']; _urls.forEach ((url) {print ("url $ i: $ url"); i ++;});}

Denne koden er virkelig ikke så ille. Her er hvordan det bryter ned

Linje 2:.. Dette er bare avstøpning kilden til hendelsen (finnes i e.target) til en XMLHttpRequest, slik at vi kan mer trygt arbeide med egenskapene på det

Linje 3: Dette blir litt vrient. Hopp til andre halvdel av linjen. Vi får response ut av XMLHttpRequest-objektet, som gir oss den rå tekst i vår fil. Og vi passerer den inn i analysemetode av JSON klassen. Det er alt som er å parsing JSON; Det er hovedsaklig innebygd! Nå, for å sørge for at vi kan arbeide med data, må vi lagre den i en variabel. Denne variabelen er resultatet. example:
someElement.on.click.add(myClickListener);someHTTPRequest.on.load.add(myLoadListener);

You



Previous:No