Odjeljci stranice
Izbor urednika:
- Kako skenirati filmske negative običnim skenerom
- Kako zaboraviti Wi-Fi mrežu na Androidu
- Prevoditelj za Android: pregled najboljih online i offline aplikacija
- Generatori harmonijskih signala koji koriste operacijska pojačala Generator čistog sinusnog zvuka
- Što je ESR. Mjerenje ESR-a. Uređaj za mjerenje ESR. ESR. Metode mjerenja Što je esr kondenzatora i kako ga izmjeriti
- Izgled i značajke korištenja univerzalne razmjene podataka Univerzalna razmjena 8
- Kako sakriti svoj broj kada zovete s megafona koristeći anti-aon uslugu Connecting anti-aon
- Učenje rada s jQuery predlošcima Cool jarko jQuery i CSS3 tooltips
- Pregled i testiranje pametnog telefona Nokia XL Dual SIM Tehnologije mobilne komunikacije i brzine prijenosa podataka
- Snimanje zaslona na Samsung Galaxy A7 pametnom telefonu
Oglašavanje
Službeni jQuery dodaci: Dodatak za predloške. Učenje rada s jQuery predlošcima Cool jarko jQuery i CSS3 tooltips |
Izlaskom jQueryja život programerima postao je mnogo lakši. Na primjer, lako možemo učiniti sljedeće: $("#someElement").children().each(function() ( $(this).wrap($("")); )); Ovaj kod će sve potomke elementa s ID-om #someElement staviti u oznaku. Nema ništa loše u takvim operacijama; Ovaj izraz je apsolutno točan i vrlo je zgodan u nekim situacijama. Ali HTML kod postavljen u našu skriptu predstavlja kršenje strukturne logike koda. U ovom jednostavnom primjeru ova povreda nije značajna, ali je u stvarnim projektima vrlo česta. Tipično, takav kod sadrži mnogo HTML fragmenata koji su ugrađeni u DOM nakon primanja podataka iz AJAX zahtjeva. Ovaj stil se brzo može pretvoriti u nešto što je krajnje nečitljivo. Korištenje predložaka omogućit će nam otklanjanje ovog nedostatka odvajanjem HTML fragmenata od skripti, čime se odvaja logika sadržaja različitih vrsta koda. Usput, ne mogu a da vam ne pokažem neke super cool nove značajke AJAX-a koje je uveo jQuery 1.5. PočetakU ovom primjeru, razvijat ćemo Twitter widget koji će učitati ne samo naše najnovije objave, već i popis prijatelja i pratitelja. Izabrao sam Twitter za ovaj primjer jer je u interakciji s JSON podacima s kojima je lako i zabavno raditi. Započnimo; sam widget bit će izgrađen na temelju sljedeće HTML strukture: jQuery, AJAX i Templating Dan Wellman
Suprug, otac, front-end programer i autor. Piše za Nettuts i Packt Publishing. Radi za @designhaus | jQuery fanatik
U ovom primjeru koristimo HTML5. Da bismo to učinili, naveli smo pojednostavljeni DOCTYPE i meta element. Također možete primijetiti u kodu vezu sa stilskim listovima, što će biti opisano za nekoliko minuta. Kako bismo podržali trenutnu verziju IE8 i niže, koristimo uvjetne komentare na posebnom dodatku html5shiv. Korištenje na stranuNajvjerojatnije će ovaj widget izgledati kao bočna traka i prikazivati sadržaj navedenog korisnika Twittera. Imajući to na umu, odlučio sam staviti sadržaj u . Kako bismo lakše pristupili ovom elementu, postavit ćemo mu ID. Kad smo već kod oznaka. Svi naslovi objava korisnika Twittera bit će uključeni u oznaku, a slika i sve ostalo bit će uključeno u oznaku Ovo možete promijeniti prema vlastitim željama kada radite obrnuti inženjering ovog primjera. Mogli bismo dobiti sve tražene podatke putem JSON-a, što ćemo i učiniti, međutim, ako dođe do kašnjenja u procesu učitavanja, posjetitelju će se prikazati puno praznih blokova. Stoga je za nas bolje pričekati dok se preuzimanje ne završi i zatim ispuniti blokove. Također ćemo imati kartice na našoj stranici za prebacivanje između lista poruka, prijatelja i pretplatnika. Svi će oni biti zatvoreni u oznake
Dakle, u primjeru je programer stranice opisao predložak za prikaz objekata u obliku oznake (prvi element skripta), onda sam odnekud dobio niz objekata filmovi i pozvao instrukciju za generiranje potrebnog označavanja prema predlošku, uzimajući podatke iz ponuđenog niza objekata i dodajući rezultat na kraj popisa #popis filmova
.
A sada na suštinu pitanja. .tmpl([ podaci ], [ opcije ]) Ova se metoda koristi, primjerice, kada nakon formatiranja podataka trebate saznati koji su podaci korišteni za formiranje određenog dijela oznake ili ažurirati dio oznake pomoću novih podataka. Ukratko ću opisati nekoliko najosnovnijih elemenata predloška; nadam se da ću ostatak detaljnije opisati u sljedećem članku (ako bude pozitivnog odgovora na ovaj članak) Članak je napisan na temelju materijala pronađenih na World Wide Webu. Ovo je uglavnom prijevod službene dokumentacije. Izvornici se mogu pogledati na sljedećim poveznicama: Moje ime je Andrey Zaitsev, profil na zandroid forumu Ovo je moj prvi članak na ovom blogu, nadam se, a ne posljednji. Veliko hvala Gennadyju na prilici za objavljivanje i korisnim savjetima o pisanju i oblikovanju materijala. PrimjeriPrimjer 1: Dinamičko prebacivanje primijenjenog predloška table ( cursor:pointer; border-collapse:collapse; border:2px solid blue; width:300px; margin:8px; ) table tr ( border:1px solid blue; color:blue; background-color:#f8f8f8; ) table td ( padding:3px; ) table tr:hover ( color:red; ) .movieDetail ( background-color:yellow; ) .movieDetail.row1 ( border-bottom:none; ) .movieDetail.row2 ( border-top:none; ) $(ime) | $(ime) | $(Godina izdanja) | Redatelj: $(direktor) | Prilično složen i opsežan, koristi nekoliko metoda dodataka odjednom, preuzetih iz. Primjer 2: Umetanje podataka s oznakom u predložak .role (font-weight:bold;font-style: italic;) #movieContainer (padding-left: 8px;) $(Naziv) ((html Sinopsis)) /* Podatkovno polje sinopsisa sadrži HTML oznake. */ var movie = ( Name: "Meet Joe Black", Synopsis: "The Grim Reaper (Brad Pitt) visits Bill Parrish (Anthony Hopkins)..." ); /* Prikaz predloška s podacima filma. Predložak koristi oznaku predloška ((html)) za umetanje podataka HTML oznake sinopsisa. */ $("#movieTemplate").tmpl(movie) .appendTo("#movieContainer");U ovom primjeru, vrijednosti polja jednostavnog niza i vrijednosti s oznakom dodane su u predložak, preuzet odavde. p.s.Nisam opisivao primjere, ali ako publika podržava moje inicijative, onda mogu korak po korak opisati što, kako i zašto, te dati još nekoliko primjera. Postavljajte pitanja o dodatku na forumu, ako ima komentara konkretno na članak, komentirajte ispod. Pruža mogućnost korištenja predložaka za jednostavno generiranje HTML elemenata iz JavaScript podatkovnih objekata. Kako bismo izbjegli nesporazume, želio bih vas upozoriti da ovaj modul trenutno nije aktivno razvijen niti podržan, a jQuery tim ne preporučuje njegovu upotrebu. To ne znači da ga ne biste trebali koristiti, ali osjećao sam da je moja dužnost to vam reći prije nego što ga uključite u svoje projekte. Rado bih preporučio neku drugu opciju koja se aktivno razvija, ali još nisam uspio pronaći zamjenu za jQuery Templates koja je i blizu po svojim mogućnostima. Ali čak i uz gore navedeni stav programera prema njemu, ovaj modul i dalje ostaje najbolji. Povijest modula jQuery Templates prilično je neobična. Microsoft i jQuery tim objavili su da su tri dodatka koja je razvio Microsoft dobila "službeni" status, nešto što nijedan dodatak nikada prije nije postigao. Nakon nekog vremena, jQuery tim je objavio da ukida ove module i oduzima im službeni status, kao i da ih planira zamijeniti drugim funkcijama. Predviđena zamjena trebala je biti dio jQuery UI biblioteke. Žalosno, ali istinito: ništa od obećanog još nije isporučeno, a odbačeni dodaci još uvijek su dostupni i naširoko se koriste (osobito dodatak za predloške). Očito je osobna odluka hoćete li koristiti zastarjeli kod ili ne, ali ja osobno volim funkcionalnost koju pružaju predlošci i često je koristim. Međutim, pretpostavljam da u bilo kojem trenutku mogu pogledati izvorni kod i riješiti svaki ozbiljan problem ako se pojavi, a činjenica da ponekad ipak morate pronaći zaobilazna rješenja kako biste prevladali manje poteškoće je plaćena prednostima koje proizlaze iz upotrebe predložaka . Postavljanje biblioteke jQuery TemplatesPrije nego što možete koristiti jQuery predloške, trebate preuzeti biblioteku jQuery predložaka i povezati je sa svojim dokumentom. Raspakirajte arhivu i kopirajte datoteku jQuery.tmpl.js (razvojna verzija) ili jQuery.tmpl.min.js (razvojna verzija) na svoj web poslužitelj. Sljedeća stvar koju treba učiniti jest dodati element skripte oglednom dokumentu koji uključuje biblioteku predložaka, kao što je prikazano u primjeru u nastavku: jQuery biblioteka $(function() ( // Ovdje će ići primjer koda )); h1 ( min. širina: 70 px; obrub: debela dvostruka crna; margina-lijevo: auto; margina-desno: auto; poravnanje teksta: središte; veličina fonta: x-veliko; ispuna: ..png"); pozadina- veličina: sadrži; margina-top: 0; .dtable (prikaz: tablica;).drow (prikaz: redak-tablice;).dcell (prikaz: ćelija-tablica; padding: 10px;).dcell > * (okomito poravnanje : sredina) unos (širina: 2em; poravnanje teksta: desno; obrub: tanka puna crna; padding: 2px;) oznaka (širina: 6em; padding-lijevo: .5em; prikaz: inline-block;) #buttonDiv ( tekst -align: center;) gumb (padding: 12px;) #oblock (display: block; margin-left: auto; margin-right: auto; min-width: 700px; ) Cvjećarna Narudžba Koristit ćemo ovaj kôd kao ogledni dokument u ovom članku. Vjerojatno ste primijetili da se razlikuje od izvorne verzije o kojoj smo ranije govorili ne samo po tome što joj je dodana biblioteka predložaka, već i po tome što su elementi koji odgovaraju različitim vrstama cvjetnih proizvoda uklonjeni. To je učinjeno posebno kako bismo te elemente u dokumentu mogli vratiti na različite načine pomoću biblioteke predložaka. Izgled izvornog dokumenta u prozoru preglednika u ovoj fazi prikazan je na slici: Primjer jednostavnog predloška podatakaNajbolji način da naučite obrasce podataka je da počnete trčati. Kako bismo demonstrirali osnovne mogućnosti predložaka, koristimo primjer koda u nastavku: ... $(function() ( var data = [ ( name: "Astra", product: "astor", stocklevel: "10", price: 2.99), ( name: "Narcis", product: "daffodil", razina zalihe: "12", cijena: 1,99), ( naziv: "Rose", proizvod: "ruža", razina zalihe: "2", cijena: 4,99), ( naziv: "Božur", proizvod: "božur", razina zalihe: "0", cijena: 1,50), ( naziv: "Primula", proizvod: "primula", razina zaliha: "1", cijena: 3,12), ( naziv: "Snjegulja", proizvod: "snjegulja", razina zalihe: "15 ", cijena: 0,99), ]; $("#flowerTmpl").tmpl(data).appendTo("#row1"); )); .png"/> $(ime): ... U sljedećim odjeljcima razdvojit ćemo primjer na zasebne dijelove i analizirati kod za svaki od njih zasebno. Kada su podaci dio dokumenta, nazivaju se ugrađeni podaci. Alternativa njima su udaljeni podaci, pohranjeni na poslužitelju odvojeno od dokumenta. Pogledat ćemo udaljene podatke malo kasnije, ali za sada možete vidjeti da je ovaj problem usko povezan s podrškom za Ajax koju pruža jQuery. Definicija podatakaPrimjer počinje s definicijom podataka. U našem slučaju, podaci su niz objekata, od kojih svaki opisuje zasebnu vrstu cvjetnog proizvoda. Relevantni isječak koda je ispod: Var data = [ ( naziv: "Astra", proizvod: "astor", razina zaliha: "10", cijena: 2,99), ( naziv: "Narcis", proizvod: "daffodil", razina zaliha: "12", cijena: 1,99 ), ( naziv: "Ruža", proizvod: "ruža", razina zalihe: "2", cijena: 4,99), ( naziv: "Božur", proizvod: "božur", razina zalihe: "0", cijena: 1,50), ( naziv: "Primula", proizvod: "primula", razina zaliha: "1", cijena: 3,12), ( naziv: "Snjegulja", proizvod: "snjegulja", razina zalihe: "15", cijena: 0,99), ]; Podaci se izražavaju kao jedan ili više JavaScript objekata. Knjižnica za izradu predložaka jQuery pruža znatnu fleksibilnost u odabiru objekata koji se mogu koristiti kao podaci, ali je format koji je gore prikazan, a koji odgovara formatu podataka JSON, najčešći. Format JS0N vrlo je važan jer se često koristi pri radu s Ajaxom. U ovom primjeru niz se sastoji od šest objekata, od kojih svaki ima niz svojstava koja opisuju određeni proizvod: naziv za prikaz, naziv proizvoda, broj dostupnih jedinica i cijenu. Definicija predloškaKao što vjerojatno možete pogoditi, središnji element biblioteke predložaka je predložak podataka. To je zbirka HTML elemenata koji sadrže rezervirana mjesta koja odgovaraju različitim svojstvima podatkovnih objekata. Predložak za ovaj primjer prikazan je u nastavku: .png"/> $(ime): Prvo što treba primijetiti je da je predložak smješten u element skripte čiji je atribut tipa postavljen na nepostojeći tip - tekst/x-jquery-tmpl. Ovo je učinjeno kako bi se spriječilo da preglednik pokuša protumačiti sadržaj predloška kao regularnu HTML oznaku. Iako nije neophodna, ovu praksu treba slijediti jer je izuzetno korisna i omogućit će vam da izbjegnete mnoge potencijalne probleme u budućnosti. Druga stvar koju želim istaknuti jest da se atribut id koristi za imenovanje predloška definiranog u elementu skripte. U ovom slučaju naziv predloška je flowerTmpl. Da biste primijenili predložak na podatke, morate znati njegov naziv. Sadržaj predloška primijenit će se na sve objekte u nizu podataka, što će rezultirati skupom HTML elemenata za svaki objekt. Možete vidjeti da struktura predloška općenito odgovara skupu elemenata koji su korišteni u prethodnim člancima za predstavljanje različitih vrsta cvjetnih proizvoda. Glavna razlika između njih su elementi koda koji djeluju kao rezervirana mjesta za podatke. Tijekom obrade predloška, svako rezervirano mjesto zamjenjuje se vrijednošću svojstva preuzetom iz trenutnog objekta. Na primjer, za prvi objekt niza, umjesto rezerviranog mjesta $(proizvod), bit će zamijenjena vrijednost svojstva proizvoda, tj. "Astor". Dakle, dio obrasca $(ime): pretvara se u sljedeći HTML fragment: Astra: Zamjena vrijednosti nije jedina stvar koju predlošci mogu učiniti. Njihove druge mogućnosti razmatraju se u nastavku. Primjena predloškaMetoda tmpl() koristi se za kombiniranje predloška s podacima. Kada to učinite, odredite podatke koji će se koristiti i predložak koji ćete na njih primijeniti. Primjer korištenja ove metode dan je u nastavku: $("#flowerTmpl").tmpl(podaci).appendTo("#row1"); Ovdje odabiremo element koji sadrži predložak pomoću funkcije $() za tu svrhu i pozivamo metodu tmpl() na rezultirajućem rezultatu, prosljeđujući joj podatke koje želimo obraditi kao argument. Metoda tmpl() vraća standardni jQuery objekt koji sadrži elemente izvedene iz predloška. U ovom slučaju, to rezultira skupom divova, od kojih svaki sadrži img, label i elemente unosa konfigurirane za jedan od objekata sadržanih u nizu podataka. Metoda appendTo() koristi se za umetanje cijelog skupa kao podređenog elementa u element row1. Rezultat je prikazan na slici: Dobiveni rezultat nas ne zadovoljava u potpunosti, budući da su svi elementi koji odgovaraju različitim bojama prikazani u jednom retku. Ali budući da imamo posla s jQuery objektom, raspoređivanje elemenata na način na koji želimo ne bi trebalo biti previše teško. Primjer u nastavku pokazuje kako se to može učiniti manipuliranjem izlazom metode tmpl(): ... $("#flowerTmpl").tmpl(data) .slice(0, 3).appendTo("#row1").end().end() .slice(3).appendTo("#row2" ); U ovom primjeru, metode slice() i end() koriste se za sužavanje i proširenje skupa odabranih elemenata, a metoda appendTo() za dodavanje podskupova elemenata koje generira predložak u različite retke. Imajte na umu da je za vraćanje skupa u stanje u kojem je bio prije korištenja slice() i appendTo() end() morao biti pozvan dva puta zaredom. U ovome nema ničeg protuzakonitog i rado koristim metodu end() da obavim stvari u jednoj izjavi, ali sekvenca end().end() me ne uzbuđuje. U takvim slučajevima radije rastavljam cijeli niz radnji u niz pojedinačnih operacija, kao što je prikazano u primjeru u nastavku: Var templResult = $("#flowerTmpl").tmpl(podaci); templResult.slice(0, 3).appendTo("#row1"); templResult.slice(3).appendTo("#row2"); U oba slučaja rezultat će biti isti: prikaz kolekcije proizvoda u dva reda, od kojih svaki prikazuje tri vrste boja, kao što je prikazano na slici: Drugi mogući pristup je promjena načina na koji se podaci prosljeđuju metodi tmpl(). Odgovarajući primjer dat je u nastavku: Var predložak = $("#flowerTmpl"); template.tmpl(data.slice(0, 3)).appendTo("#row1"); template.tmpl(data.slice(3)).appendTo("#row2"); U ovom scenariju, raspodjela elemenata u retke vrši se dvaput korištenjem predloška - jednom za svaki red. Odgovarajući dio podatkovnih objekata prosljeđuje se predlošku svaki put pomoću metode slice(). Unatoč razlici između ovog pristupa i prethodnog, dobivamo isti rezultat koji je prikazan na gornjoj slici. Vrednovanje izrazaPodatkovni objekti mogu se koristiti za više od pukog dobivanja vrijednosti svojstava. Ako postavite JavaScript izraz između dvije vitičaste zagrade, mehanizam predloška će ga procijeniti i umetnuti u HTML oznake koje generira predložak. Odgovarajući primjer dat je u nastavku:
U ovom obrascu, atribut vrijednosti ulaznog elementa postavljen je na temelju vrijednosti svojstva razine zaliha pomoću ternarnog uvjetnog operatora. Izraz u vitičastim zagradama ima istu ulogu koju bi imala izravna vrijednost svojstva zapisanog na njegovom mjestu. Ako je vrijednost svojstva stocklevel veća od nule, tada je vrijednost postavljena na 1, inače - na 0. Rezultirajuća stranica u prozoru preglednika prikazana je na donjoj slici. Vrijednost zaliha veća od nule postavljena je za sve boje osim božura: Ovaj primjer ilustrira osnovni način rada s predlošcima: podaci se kombiniraju s predloškom kako bi se proizveli DOM objekti, koji se zatim dodaju dokumentu pomoću osnovne funkcije jQuery. Za generiranje sadržaja možete koristiti ili izravno navedene vrijednosti ili izračunate izraze. Korištenje varijabli predloškaPredlošci nisu JavaScript skripte. Svaki sadržaj koji dodate elementu skripte smatra se dijelom predloška i bit će uključen u izlaz. Kako bi predlošci bili fleksibilniji, nudi vam se mali broj varijabli konteksta koje se mogu koristiti u deskriptorima rezerviranih mjesta. Kratak opis ovih varijabli nalazi se u tablici ispod: Korištenje varijable $dataVarijabla $data vraća trenutni podatkovni element na koji je primijenjen predložak. Na primjer, korištena varijabla $data će redom referencirati svaki od objekata koji odgovaraju različitim vrstama boja. Za dobivanje podataka u prethodnom primjeru, predložak je koristio ternarni uvjetni operator. Ovaj pristup je sasvim prihvatljiv, ali čitanje dobivenih predložaka često uzrokuje poteškoće, koje je, naravno, poželjno izbjegavati. Uvijek pokušavam zadržati svoj kod predloška na potrebnom minimumu i stoga radije koristim varijablu $data unutar JavaScript funkcija koje zatim pozivam iz predloška. Odgovarajući demo je dan u nastavku: $(function() ( var data = [ ( name: "Astra", product: "astor", stocklevel: "10", price: 2.99), ( name: "Narcis", product: "daffodil", stocklevel: " 12", cijena: 1,99), ( naziv: "Ruža", proizvod: "ruža", razina zalihe: "2", cijena: 4,99), ( naziv: "Božur", proizvod: "božur", razina zalihe: "0" , cijena: 1,50), ( naziv: "Primula", proizvod: "primula", razina zalihe: "1", cijena: 3,12), ( naziv: "Snowdrop", proizvod: "snowdrop", razina zalihe: "15", cijena : 0,99), ]; var template = $("#flowerTmpl"); template.tmpl(data.slice(0, 3)).appendTo("#row1"); template.tmpl(data.slice(3)) .appendTo("#row2"); )); funkcija stockDisplay(product) ( return product.stocklevel > 0 ? 1: 0; ) .png"/> $(name): Ovaj primjer definira funkciju stockDisplay() koja vraća vrijednost koja bi trebala biti prikazana u ulaznom elementu. Argument ove funkcije je podatkovni objekt, koji dobivamo unutar predloška pomoću varijable $data. S obzirom da se radi samo o jednostavnom ternarnom operatoru, razlika u čitljivosti koda u odnosu na prethodnu verziju nije značajna, ali u slučaju složenijih izraza ili u slučaju ponovljene upotrebe izraza unutar istog predloška, biti puno uočljiviji. Budite oprezni pri definiranju funkcija koje će se pozivati iz predloška. Poanta je da takve funkcije moraju biti definirane prije pozivanja metode tmpl(). Uvijek ih pokušavam staviti na kraj elementa skripte, ali ako funkcija mora biti unutar spremnog rukovatelja događajima, onda svakako trebate provjeriti je li prethodno definirana. Druga uobičajena pogreška je da je funkcija često definirana unutar predloška. Korištenje funkcije $() unutar predloškaRezervirana mjesta koja se koriste unutar predloška mogu koristiti funkciju jQuery $(), ali važno je upamtiti da elementi generirani predloškom nisu priloženi dokumentu i stoga neće biti uključeni u jQuery skupove odabira. Rijetko koristim ovu značajku jer me obično više zanimaju elementi i povezani podaci koje sam generiram. Korištenje varijable $itemObjekt koji vraća $item služi u nekoliko svrha. Prvi je omogućiti razmjenu dodatnih podataka između JavaScript skripte i predloška. Odgovarajući primjer je dat u nastavku: $(function() ( var data = [ ( name: "Astra", product: "astor", stocklevel: "10", price: 2.99), ( name: "Narcis", product: "daffodil", stocklevel: " 12", cijena: 1,99), ( naziv: "Ruža", proizvod: "ruža", razina zalihe: "2", cijena: 4,99), ( naziv: "Božur", proizvod: "božur", razina zalihe: "0" , cijena: 1,50), ( naziv: "Primula", proizvod: "primula", razina zaliha: "1", cijena: 3,12), ( naziv: "Snowdrop", proizvod: "snowdrop", razina zalihe: "15", cijena : 0,99), ]; $("Današnja posebna ponuda: " + "50 centi popusta") .insertAfter("h1") .css(( boja: "red", fontSize: "14pt", textAlign: "center " ) ); var options = ( discount: $("#offer").data("discount"), stockDisplay: function(product) ( return product.stocklevel > 0 ? 1: 0; ) ); var template = $ (" #flowerTmpl"); template.tmpl(data.slice(0, 3), options).appendTo("#row1"); template.tmpl(data.slice(3), options).appendTo("#row2 ") ;)); .png"/> $(ime): U ovom primjeru stvaramo objekt opcija koji definira svojstvo (popust) i metodu (stockDisplay()). Ovaj se objekt zatim prosljeđuje metodi tmpl() kao drugi argument. Varijabla $item omogućuje pristup svojstvima i metodama objekta iz predloška. Kao što vidite, za rukovanje popustom na cijenu ovdje se koristi svojstvo popusta objekta opcija. Želio bih vam skrenuti pozornost na potrebu uključivanja prefiksa $ u nazive varijabli konteksta: $item i $data. Isti je prefiks također potreban u konstrukciji deskriptora predloška $(...), koji se koristi za zamjenu vrijednosti u predlošku. Izostavljanje bilo kojeg od ovih prefiksa jedna je od najčešćih pogrešaka. Kasnije ćemo govoriti o drugim primjenama ovog objekta. Korištenje ugniježđenih predložakaPrilikom izrade složenih aplikacija ponekad ima smisla razbiti veliki predložak na nekoliko dijelova koji se kombiniraju u fazi izvođenja aplikacije. Kao što će biti pokazano kasnije, ova metoda kombiniranja predložaka omogućuje fleksibilniju kontrolu izlaza. Počet ćemo s najosnovnijim. Primjer u nastavku pokazuje kako jedan predložak može referencirati drugi: ... .png"/> $(ime): ((tmpl($data, $item) "#inputTmpl")) U ovom primjeru predložak je podijeljen na dva dijela. Prvi od njih, predložak flowerTmpl, poziva se za svaki element niza podataka. Ovaj predložak zauzvrat poziva predložak inputTmpl za stvaranje ulaznih elemenata. Drugi predložak poziva se pomoću oznake ((tmpl)). Ovaj poziv zahtijeva tri argumenta. Prva dva su trenutna stavka i objekt opcija; ovi argumenti su u zagradama. Treći argument je predložak za poziv. Može se navesti jQuery selektorom (kao što je učinjeno gore) ili varijablom ili funkcijom definiranom u skripti. Korištenje uvjetnih uzorakaPredložak omogućuje dinamičko donošenje odluka o korištenju različitih dijelova predloška ovisno o ispunjavanju određenih uvjeta. Za to postoje deskriptori ((if)) i ((/if)), primjer njihove upotrebe prikazan je u nastavku: ... ((ako je razina zaliha > 0)).png"/> $(ime): ((/ako)) Uvjet je naveden u ((if)) deskriptoru, a dio predloška između ovog deskriptora i ((/if)) deskriptora koristit će se samo ako uvjetni izraz ima vrijednost true. Ako je ovaj rezultat lažan, tada se navedeni dio predloška zanemaruje. U ovom slučaju provjerava se vrijednost svojstva stocklevel, a ako je jednaka nuli, tada se cijeli predložak flowerTmpl zanemaruje. To znači da će biti prikazani samo oni proizvodi koji su na zalihi, kao što je prikazano na slici: Složeniji uvjeti mogu se specificirati pomoću ((else)) deskriptora, koji vam omogućuje da specificirate dio uzorka koji bi se trebao koristiti u slučajevima kada izraz u ((if)) deskriptoru ima vrijednost false. Odgovarajući primjer dat je u nastavku: ... ((ako je razina zaliha > 5)) .png"/> $(ime): ((inače razina zaliha > 0)) .png"/> $(ime): (Mali iznos) ((drugo)) .png " style="opacity:0.5"/> $(name) (Nema na zalihama) ((/if)) U ovom scenariju skup prikazanih stavki određen je brojem jedinica svake vrste proizvoda na zalihi: više od pet, pet, manje od pet ili nema na zalihi. Uveo sam samo manje razlike između elemenata generiranih za svaki od ovih uvjeta, ali možete slobodno koristiti ove značajke za generiranje potpuno drugačijeg sadržaja. Na kraju, ako je potrebno, možete pozvati druge predloške prema uvjetu. Rezultat gornje skripte prikazan je na slici: Jednostavan primjer (1) Redatelj: $(redatelj) A ovo je ono što ćete vidjeti u pregledniku: Pogledajmo detaljnije ovaj primjer. Dakle, prvo što radim je povezivanje jQuery Core Library I jQuery predlošci:
Zatim učitavam popis filmova:
Unutar datoteke DataItems.js kako slijedi: Var dataItems = [ ( naslov: "Bandits", sličica: "Bandits.jpg", redatelj: "Barry Levinson", glumci: ["Bruce Willis", "Billy Bob Thornton", "Cate Blanchett"], godina: 2001., proračun: 95000000, bruto prihod: 67631903, ocjena: 0, okviri: ["Bandits-1.jpg", "Bandits-2.jpg", "Bandits-3.jpg", "Bandits-4.jpg", "Bandits- 5.jpg"] ), ...
Redatelj: $(redatelj) Imajte na umu da se predložak nalazi u oznaci SCENARIJ, i kao MIME vrstu koju sam naveo tekst/x-jquery-tmpl. Kada naiđe na nepoznatu MIME vrstu prilikom analize dokumenta, preglednik ne pokušava protumačiti sadržaj oznake SCENARIJ, što je ono što mi treba. Općenito govoreći, predložak se može postaviti u bilo koju oznaku, na primjer u oznaku DIV:
Redatelj: $(redatelj) Međutim, u ovom slučaju, nuspojave se ne mogu izbjeći, jer preglednik će svakako pokušati protumačiti kod predloška. Na primjer, gornji primjer pokušat će učitati nepostojeću sliku: Ali u slučaju tablice sve može biti puno zanimljivije (veliko hvala TEHEK-u na ovom primjeru!):
Internet Explorer i Opera ispravno će obraditi ovaj kod: Ali Chrome i Fire Fox će "gurnuti" dodatni kod izvan tablice, što će rezultirati praznom tablicom... Sretno uklanjanje pogrešaka! ;-) Za oznaku IZABERI uočit će se slična slika. Konačno, instanciram predložak sa sljedećim pozivom: $("#movieTmpl").tmpl(dataItems).appendTo("#movieListBag"); Korištenje svojstava objekta (element niza): $(naslov)
Proračun: $$((budget / 1000000).toFixed(0)) milijuna. Svaka instanca predloška sadrži sljedeća polja: Ispod je primjer korištenja ovog parametra:
Redatelj: $(redatelj) $(funkcija () ( $("#movieTmpl") .tmpl(dataItems, ( formatBudget: funkcija (vrijednost) ( return (vrijednost / 1000000).toFixed(0); ), formatGrossRevenue: funkcija (vrijednost) ( return (vrijednost / 1000000).toFixed(1); ) )).appendTo("#movieListBag"); )); U ovom primjeru koristim pozive funkcija za formatiranje proračuna i vrijednosti naknade, ali da izbjegnem pretrpavanje globalnog imenskog prostora, proslijedio sam ih kroz parametar opcije, nakon čega su te funkcije postale dostupne kao metode trenutne instance predloška. Konačno, instanca predloška sadrži metode Ažuriraj() I html(), čiju ću upotrebu prikazati u nastavku. Kako izgleda sastavljeni predložak? Pomoću metode možete vidjeti kako izgleda sastavljeni predložak .template(), koji samo sastavlja predloške. Ova metoda vraća funkcijski objekt čiji je sadržaj lako vidjeti:$("#compiledTemplateBag").text("" + $("#movieTmpl").template()); Funkcija anonymous(jQuery, $item) ( var $ = jQuery, call, _ = , $data = $item.data; with ($data) ( _.push(" Direktor: "); if (typeof (direktor) !== "undefined" && (direktor) != null) ( _.push($.encode((typeof (direktor) === "funkcija" ? (direktor). poziv($item) : (direktor)))); ) _.push(" Mislim da biste sada trebali razumjeti kako se obrađuju izrazi navedeni u oznaci ${...} - a ovo vam razumijevanje može značajno pomoći prilikom otklanjanja pogrešaka! Činjenica je da jQuery predlošci izvodi relativno jednostavnu transformaciju teksta predloška, tako da ako pogriješite u izrazu, poruka o pogrešci odnosit će se na tekst rezultirajuće funkcije i često može biti vrlo zbunjujuća. Nažalost, ako se predložak kompajlira s pogreškom, tada bez posebnih trikova nećete moći vidjeti tekst funkcije s pogreškom, jer odgovarajuća metoda je proglašena privatnom. Pa to je valjda to za priču o poslu. jQuery predlošci vrijedi ga dovršiti i prijeći na njegovu praktičnu primjenu. Drugi dio, praktični uvjeti Kako biste primijenili dijelove predloška ovisno o određenim uvjetima, u jQuery predlošci koriste se oznake ((ako))...((drugo))...((/ako)).Primjer ispod pokazuje upotrebu ovih oznaka (potpuni primjer koda je u datoteci IfElseTag.htm):
Mediji: ((ako $item.data.media == "dvd")) Kao što možda pretpostavljate, ovaj kod je namijenjen za prikaz ikone medija na kojem se film nalazi. Evo kako to izgleda u pregledniku: Kao uvjet u oznakama ((ako)) I ((drugo)) Možete koristiti bilo koji važeći JavaScript izraz. Obrada zbirki Za obradu zbirki u predlošcima koristite oznaku ((svaki))...((/svaki)). Primjer u nastavku prikazuje upotrebu oznake ((svaki)) za prikaz popisa glumaca (potpuni primjer koda je u datoteci Svaka oznaka1.htm):Uloge: ((svaki glumac)) $($value) ((ako $index< $data.actors.length - 1}}
,
{{/if}}
{{/each}}
Kao argument za oznaku ((svaki)) možete proslijediti niz, objekt ili jQuery-kolekcija. Unutarnja oznaka ((svaki)) koristi poziv jQuery.each() pa što god dokumentacija govori o ponašanju jest jQuery.each() vrijedi i za oznaku ((svaki)). Primjer ispod pokazuje upotrebu oznake ((svaki)) za prikaz svih svojstava objekta (potpuni primjer koda je u datoteci Svaka oznaka2.htm): ((each $data)) $($index) $($value) ((/each)) Naravno, unutar oznake ((svaki)) možete koristiti druge oznake, a osim toga, i dalje ćete imati pristup varijablama $stavka I $podaci. U navedenom primjeru varijable $index I $podaci zajedno s oznakom ((ako)) koriste se za ispis zareza između imena glumaca - nažalost varijabla $posljednji nije predviđeno, iako bi bilo vrlo korisno! Konačno, ako ikada budete trebali, možete promijeniti zadane nazive varijabli. U donjem primjeru ova su imena promijenjena u mojIndex I mojaVrijednost(potpuni primjer koda je u datoteci Svaka oznaka3.htm): Uloge: ((svaki(myIndex, myValue) glumci)) $(myValue) ((ako je myIndex< $data.actors.length - 1}}
,
{{/if}}
{{/each}}
Primjer u nastavku ilustrira kako premjestiti dio koda predloška u drugi predložak (cijeli primjer koda nalazi se u datoteci NestedTemplates1.htm): ... Redatelj: $(redatelj) U oznaci ((tmpl)) mora biti naznačeno jQuery-selektor predloška koji se poziva ili naziv predloška prethodno spremljenog u predmemoriju. Jer u ovom primjeru drugih argumenata za oznaku ((tmpl)) ne, ugniježđeni predložak primit će isti podatkovni element kao roditelj - ali će imati vlastitu instancu predloška i polje roditelj odnosit će se na nadređenu instancu predloška. Sljedeći primjer demonstrira prosljeđivanje novog podatkovnog elementa u ugniježđeni predložak i korištenje reference na nadređenu instancu predloška. Kao i u slučaju korištenja metode .tmpl(), ako navedete niz prilikom pozivanja ugniježđenog predloška, predložak će se primijeniti na svaki element niza (cijeli primjer koda nalazi se u datoteci NestedTemplates2.htm): ... Redatelj: $(redatelj) Konačno, posljednji primjer u ovom odjeljku pokazuje kako proslijediti argument ugniježđenom predlošku opcije, a ujedno i demonstrira kao argument opcije može se koristiti za određivanje posljednjeg elementa u obrađenom nizu (potpuni primjer koda je u datoteci NestedTemplates3.htm): ... Redatelj: $(redatelj) Klasičan primjer korištenja oznake ((omotati))- ovo je stvaranje knjižnih oznaka: Ovako izgleda unutra (potpuni primjer koda je u datoteci Transformacija1.htm): ((wrap(null, ( viewState: $item.viewState )) "#tabsTmpl")) engleski The Ballad of East and West Rudyard Kipling Oh, istok je istok, a zapad je zapad... ((/zamotati))Početni podaci za transformaciju nalaze se u predlošku tabContent- to je predložak koji ću dalje instancirati. HTML oznake koje ću transformirati idu u oznaku ((omotati)). Za oznaku ((omotati)) koristi se ista invokacijska notacija kao i za oznaku {}}
Predložak se kompilira i predmemorira na sljedeći način: $("#movieTmpl").template("movieTmpl"); $.tmpl("movieTmpl", dataItems).appendTo("#movieListBag"); Kod predloška praktički se ne razlikuje od onih koje sam ranije koristio, jedina je razlika što ispod opisa filma postoje dodatne veze za navigaciju (cijeli primjer koda je u datoteci Spremljeni predlošci.htm):
Redatelj: $(redatelj) Prateća skripta također je jednostavna: Var movieIndex = 0; $(funkcija () ( $("#movieTmpl").template("movieTmpl"); updateMovie(); $("#movieBag").delegate(".nav-link", "klik", funkcija () ( movieIndex += parseInt($(this).attr("x-inc")); updateMovie(); )); )); funkcija updateMovie() ( $("#movieBag").empty(); $("#movieBag").append($.tmpl("movieTmpl", dataItems, ( canMoveBack: movieIndex > 0, canMoveFwd: movieIndex< dataItems.length - 1
}));
}
Evo kako ovaj primjer izgleda u pregledniku:
Ali predložak se još uvijek može staviti u zasebnu datoteku, a to će zahtijevati doslovno jednu dodatnu liniju koda (cijeli primjer koda je u datoteci): $(funkcija () ( $.get("Templates/DynamicLoading.htm", (), funkcija (templateBody) ( $.tmpl(templateBody, dataItems).appendTo("#movieListBag"); )); )); Da, metoda jQuery.tmpl() se koristi za instanciranje i predmemoriranih predložaka po imenu i predložaka navedenih kao tekst (tradicija!..) - međutim, dovoljno je "pametan" da ih razlikuje jedan od drugog. Ako trebate učitati više povezanih predložaka, možete koristiti biblioteku WaitSync(pogledajte “Sinkroniziranje asinkronih poziva. WaitSync”) ili napišite vlastiti sinkronizator (potpuni primjer koda je u datoteci): $(function () ( var ws = new WaitSync(function () ( $.tmpl("movieTmpl", dataItems).appendTo("#movieListBag"); )); $.ajax(( cache: false, url: " Predlošci/MovieTmpl.htm", uspjeh: ws.wrap("MovieTmpl", funkcija (templateBody) ( $.template("movieTmpl", templateBody); )), pogreška: ws.wrap("MovieTmpl", funkcija () ( upozorenje("Pogreška pri učitavanju MovieTmpl.htm!"); )) )); $.ajax(( cache: false, url: "Templates/ActorsTmpl.htm", uspjeh: ws.wrap("ActorsTmpl", funkcija (templateBody) ( $.template("actorsTmpl", templateBody); )), pogreška: ws.wrap("ActorsTmpl", funkcija () ( alert("Pogreška pri učitavanju ActorsTmpl.htm!"); )) )); ));
Redatelj: $(redatelj) U primjeru ispod, za svaki film, dodana je mogućnost promjene njegove ocjene (cijeli primjer koda je u datoteci DynamicUpdate1.htm):
$(funkcija () ( $("#movieTmpl").tmpl(dataItems).appendTo("#movieListBag"); $("#movieListBag").delegate(".rating-button", "klik", funkcija ( ) ( var item = $.tmplItem(this); item.data.rating += parseInt($(this).attr("x-inc")); item.update(); )); )); U pregledniku ovaj primjer izgleda ovako: Sljedeći primjer pokazuje zamjenu povezanog predloška (cijeli primjer koda nalazi se u datoteci DynamicUpdate2.htm): ((tmpl "#movieMainTmpl")) [Više...] ((tmpl "#movieMainTmpl"))Kadrovi iz filma: ((svaki okvir))[Manje...] Ovdje koristim dva predloška, filmShortTmpl I movieFullTmpl, čiji je opći dio uključen u predložak filmGlavniTmpl. Povezani kôd: $(function () ( var shortTemplate = $("#movieShortTmpl").template("shortTemplate"); var fullTemplate = $("#movieFullTmpl").template(); $.tmpl("shortTemplate", dataItems). appendTo("#movieListBag"); $("#movieListBag").delegate(".more-details", "click", function () ( var item = $.tmplItem(this); item.tmpl = item.tmpl === kratki predložak ? puni predložak: kratki predložak; item.update(); )); )); Za zamjenu predloška potrebna mi je poveznica na kompilirani predložak. Ove veze dobivam putem poziva .template(). Osim toga, jer uzorak kratki predložak koristi se za renderiranje popisa filmova nakon što se stranica učita, spremam ga u predmemoriju kako bih ga mogao instancirati po imenu. U pregledniku ovaj primjer izgleda ovako: Zaključak Kôd za primjere korištene u članku možete preuzeti na ovoj poveznici.preuzimanje datoteka jQuery predlošci možete s web stranice ASP.NET CDN ili izravno iz GitHub repozitorija: I na kraju, želio bih izraziti svoju zahvalnost Vitaliju Dilmukhametovu i Denisu Gladkikhu na vrijednim komentarima tijekom rada na članku. Oznake: Dodajte oznake |
Popularan:
Mrežni adapter - što je to?![]() |
Novi
- Kako zaboraviti Wi-Fi mrežu na Androidu
- Prevoditelj za Android: pregled najboljih online i offline aplikacija
- Generatori harmonijskih signala koji koriste operacijska pojačala Generator čistog sinusnog zvuka
- Što je ESR. Mjerenje ESR-a. Uređaj za mjerenje ESR. ESR. Metode mjerenja Što je esr kondenzatora i kako ga izmjeriti
- Izgled i značajke korištenja univerzalne razmjene podataka Univerzalna razmjena 8
- Kako sakriti svoj broj kada zovete s megafona koristeći anti-aon uslugu Connecting anti-aon
- Učenje rada s jQuery predlošcima Cool jarko jQuery i CSS3 tooltips
- Pregled i testiranje pametnog telefona Nokia XL Dual SIM Tehnologije mobilne komunikacije i brzine prijenosa podataka
- Snimanje zaslona na Samsung Galaxy A7 pametnom telefonu
- Razlozi kvara vremena na prijenosnom računalu i kako ih popraviti. Postavke datuma i vremena na računalu su izgubljene