>> Tak s tím bylo řečeno,
jen trochu jednoduchý úvod do prototypů
a objektový model JavaScript.
Nebudeme se posunout kola trochu mluvit
o více JavaScript na serveru a regál knihovny
a připojení Knex knihovny.
Takže můžete vlastně jen -
pokud hledáte Bookshelf.js to by mělo být docela snadné
najít, by měla být první výsledek, a Bookshelf
jako David zmínil jen dává hodně struktury
kolem objektů JavaScriptu a pracovat s nimi relačně
v relačních databázích.
Takže, hodně podobné rysy kdo je vlastně silně inspirován
podle Laravel je ORM jako stejně jako Backbone.js,
což je přední konec MVC knihovna, která vám umožní
strukturovat svůj kód, podobné tomu, co jsem ukazoval
s příklady prototypy, kde můžete -
místo toho jen svévolně házení třídy
Na vaše názory sem a tam.
To vám dává modelů a sbírky těchto modelů
, které mají působit jako druh jediný bod pravdy
o data pro aplikace.
A pak budete poslouchat, co ti modely změny, říkáte, OK,
znovu činí tuto šablonu tady a tohle sem
a ne jen přidat třídu sem, přidat třídu tam a trochu vybrat
na voliče a aby pavučiny z jQuery kódu.
To dává větší class-based struktura na jednotlivé kusy,
ale důležitou složkou že knihovna je modely
, které mají podobnou strukturu na to, co Knihovnička modely dělat.
Takže, pokud jste obeznámeni s Regál jsi hezká i
docela obeznámeni s Backbone.js modely,
a já bych doporučit přičemž se podívat na tohle.
Takže některé z hlavních rysů
, že to dává jste právě možnost nastavit údaje o objektu
volat načíst, které vrátí individuální záznam
z databáze, vytvořit vztahy jako obdobné
na to, co řešit v rámci v Laravel
kde si můžete říct, Pacient nastavit metodu záznamu
a říkají, že toto vyhrál záznam
kde objekt záznam Jméno tabulka zdravotní záznamy.
Pojďme se podívat.
Má mnoho - to patří k -
jen věci, které jste dost podobné -
docela obeznámeni s už, ale v JavaScriptu.
A pod kapotou, pro regál,
používá stavitel dotaz tzv. Knex.js.
Tak, to je Knex, knexjs.org.
Je to odkaz na hračce, pokud kdo kdy hrál s tím.
Ale to vám umožní - v Podobným způsobem se jQuery,
stačí nějak vytvořit řetězec různých metod
že voláte na vašem Databáze řádek, takže můžete -
jste začal tím, Knex a název tabulky.
Tak, například, uživatelé Knex, vyberte sloupce, které chcete,
kde, a mají odlišná, pokud podmínkové a můžete mít
A kde, nebo kdy, kde v letech, kdy není,
nyní, na celé čáře.
Můžete určit různé spoje mezi databázových tabulek
které Knihovnička používá interně nastavit druh magie
kolem hasOne, hasMany, Patří, belongsToMany.
A tak kombinace
z těch dvou vám to pěkně moc, co byste použít
v rámci, jako Laravel, pokud jde
funkčnosti práci s databázemi.
Takže, pojďme do toho a vzít Podívejte se na jednoduchý příklad
pro Express aplikace, které využívá těchto modelů
a sbírky Regál jazz [fonetický].
Takže jsem nastavit jen jednoduchá aplikace zde.
Jsem svlékl některé z věcí , která byla při inicializaci výslovnou
a navrhnout, aby do init adresář, který jsem vytvořil.
Jednou z pěkných věcí o pracovat s Express, jak mají
na Laravel je, že je opravdu není moc vynucena
na vás conventionalized.
Takže si můžete vytvořit adresáře -
to opravdu není vám mnohem pracovat pryč.
Musíš jen trochu některé základní nastavení a pak -
ale to není jedno, kde jste je uložili.
Nemusíte mít adresář regulátoru.
Nemusíte mít modely adresář, adresář config.
Můžete nějak vytvořit ty, které jsou vaše potřeby projektu
a připravit věci na cestu že smysl pro vás nejdůležitější.
Takže místo toho, aby všechny Tento výslovný často používaný
v hlavních app.js jsem právě řekl, app rovná vyžadují init / express.
A tak v init,
inicializace složka Právě jsem se vyjádří zde,
a to vyžaduje Express, volání Funkce nastavení, volání -
nastaví zobrazení motoru, JSON parser, všechno.
Takže teď, pojďme pokračovat dolů.
Takže jsem vyžadující Kurz instruktor setkání
a požadavky modely.
Tak to je ve složce, která Jen jsem se rozhodla název modelu.
To nemusí být, že způsob, ale to dává smysl,
ale modely jsou jen dost společné, takže bych ji doporučit.
Ale - Tak pojďme na kurzu.
Myslím, že jsem pomocí - Jo a příklady
tady jsou všechny založeny kolem modelu kurzu.
Takže pojďme se jen tak podívej se na to.
Tak, teď, jen z První řádek tohoto modelu,
Už jsem vyžadující něco jiného.
Takže pokud si všimnete v uzlu měli byste být vyžadující
nebo se chystáte skončit vyžaduje spoustu
z různých souborů které jsou umístěny
v různých místech ve vaší aplikaci.
A relativní cesty , ať jste kdekoli
v aktuální aplikaci,
pokud je to na nejvyšší úrovni již definována jako jej nainstalovat
s MPM, jako regál nebo Knex nebo Express nebo tak něco,
které nejsou relativní.
Ano? Přiblížit více?
OK. OK. Takže, budete skončit vyžaduje spoustu
ze jen různé soubory ve vašem kód, který je dobré a špatné.
V dobrém slova smyslu víte, kde věci jsou, a není to nějak
magie, co je děje pod kapotou,
které mohou být opravdu matoucí
pokud máte velmi těžký Java -
nebo velmi těžká rámec jako Laravel, jaký typ říká,
budeme starat to proto, že nemáte
požadovat, aby všechno ale máte
vědět, jak vše pracuje, aby se ji používat.
V případě, jako v tomto případě, je to velmi jednoduché, aby se
kde je vše, jsou to jen konce
up je trochu psaní.
Stejně jako v části I like k použití, tam je plugin
Používáte-li slepý text,
kde můžete instalovat uzel moduly pomocným a můžete začít
psát jako instruktora a vytváří relativní cestu
kde jste na to Kód souboru, druh užitečné.
Takže, model samozřejmě se vyžaduje základnu zde
a pak základní intern vyžaduje init / polici
a pak regál, je vyžaduje nejvyšší úroveň Knihovnička
a pak inicializuje se inicializaci Knex instance,
který nastaví název klienta
a připojení nastavení databáze.
Tak jsem jen pomocí jednoduchého instance Sequel Pro, který -
MySQL, mám přístup s Sequel Pro a to má jen trochu
z podobného databáze nastavit jako jsme měli
v první ukázkové aplikace s katalogem kurzu.
Takže, mohu nastavit připojení nastavení tady,
a ty jsou zdokumentovány na projektové stránce Knex.js
jak nastavit Tyto spoje.
Tak, teď mám svůj základní model.
A jak jsem se zmínil se změna prototyp,
tak, že může skutečně být trochu hodně -
přidává hodně často používaný do kódu tak konvence
, který byl upraven podle Backbone.js
a teď Bookshelf.js je přidat k prodloužení metodou
jako statická vlastnost na Vaše objekty JavaScript,
což mu dává jakousi téměř class-based dědictví přírody
kde pokud zavoláte rozšíření můžete nastavit jakýkoli
metod prototypu že byste tu chtěli
a pak můžete - jakýkoli další statické metody
že budete chtít, můžete stačí nastavit jim sami
tady, takže můžu prodloužit s - takže pokud například
více modelů potřeby zobrazit jména a toto dostat jméno.
Takže, tady, říkám Zobrazovaný název pro model
Ve výchozím nastavení je bez ohledu na jeho název vlastnost je jinak návrat
no name.
A teď na každém model, který je -
která rozšiřuje tuto základní model, I Nyní máme způsob zobrazení jména
na prototypu řetěz někde.
A když chci přepsat Mohu jen nastavit - set co -
getname tu bude.
A to vám umožní napodobit klasické dědictví
v JavaScriptu, které mohou být pěkné, zejména pro věci
které jsou samy o sobě jsou třída vychází jako objektové modely.
Takže pojďme skočit zpět do kód aplikace.
Tak jsem se dostal trasu jen lomítko, jen pro mé indexu
a pak lomítko kurzy.
A to jak z nich jsou volání Metoda renderCourses.
Takže znovu, funkce první třídy a mohou být předány
jako argumenty metody.
Takže v tomto app.get, Volám -
Já jsem kolem renderCourses jako argument.
A činí - nebo funkce lze nastavit jako var -
jak jsem dělal dříve var renderCourses rovná funkci
nebo mohou být jen funkce renderCourses.
To nedává moc velký rozdíl.
Můžete si skutečně to, co se nazývají název funkce
výrazy, které jsou var renderCourses rovná
funkce renderCourses.
A důvod, proč chcete mít jméno funkce, zejména
v uzlu, je to, že vám čistší -
více čitelné trasování zásobníku.
Takže pokud máte spoustu
anonymních funkcí to bude říkat -
když máte chybu v kódu Budeš -
nebudete vědět, které funkce to volá byste se podívat
u kódového čísla a číslo řádku
a to je někdy jednodušší jen vizuálně analyzovat
když ve skutečnosti mají jména
pro funkce sami na straně serveru.
Takže to renderCourses, říkejme uzlu aplikace -
tak jsem poslouchal na Jádro 3000 [fonetický].
A tak to všechno dělá správně Zde je jen to, aby všichni
kurzy z databáze.
Nebudu to ani omezení tak to dělá obrovské množství
řádků to vrací.
A aby to,
na tam modelu kurzu je statická vlastnost
volal kolekce.
A tak jsem jen říkám - já řekl, vytvořit novou kolekci
U tohoto předmětu, a pak ji vyzvednout,
a pak se vrátit kurzy Sbírka tady v zaslíbení.
Takže interně, David in - poslední půl naučil trochu
o sliby a sliby jsou používá velmi těžce jak Knex
a Bookshelf, protože půjčuje -
to vám dává možnost mít spoustu
z různých asynchronních volání a nějak spojit a pak společně
nebo přinést něco, a pak
s touto výzvou jiným asynchronní volání databáze
a vrátí tuto hodnotu a pak přejít na další pak
a další pak a pak chytit na samém konci třídit
mimických asynchronní try catch chování s asynchronním kódem,
proto, že jste ji viděl teď
ale to je ještě těžší, jakmile začnete se s ní vyrovnat.
Asynchronní kód je prostě všude
na straně serveru JavaScriptu a opravdu mnohem větší míře
než jste zvyklí, pokud co jste udělal JavaScript
na straně klienta.
Takže to opravdu, ale opravdu vám pomohl ven.
Ale jen proto, aby vám ukázat, prohlášení debugger
že jsem mluvil v inspektor nástrojů uzel,
Chystám se jít dopředu a hodit ladicí linku zde
ve funkci renderCourses a uvidíme, kam mě to vede
když jsem - tak uzel Inspektor může být instalován
tím, že dělá NPM Instalovat s G vlajkou,
což znamená, že Global Uzel Inspector.
A to Přinesu ji NMP a nainstalujte ji na celém světě
pro vaše aplikace takže si můžete jen říkat
z příkazového řádku.
Jsem již nainstalován to tak budu pokračovat a -
ve skutečnosti by to mohlo mít počkat, to si vezmu,
mít dvě sekundy.
A co uzel inspektor zase umožňuje vám
udělat, je mít tento bezhlavý verze ladicí konzoli
které jste zvyklí při práci na straně klienta a musí být schopen
zastavit, stačí přidat specifikován body v kódu.
Zastavit provádění a vzít podívejte se na to, co se děje,
, která by měla ve skutečnosti přijde vhod, pokud je funkce
jako že byly k dispozici
Při ladění PHP kód, který jsem si jist.
Takže pojďme se jen tak podívej se na to.
Tak jsem si jen zavolat uzel inspektor
a řeknu navštívit tuto adresu URL Port 5858 spustit ladění,
to je jen výchozí jak to nastartuje.
Takže jsem se dostal - je tu nic, co se tady děje
proto, že musím začít.
Takže uzel bezvýchodná situace [fonetický] debug vlajka a pak app.js.
Tak to říká debugger naslouchá na portu 5858,
Expresní serveru poslech na 3000.
Takže jsme v pohodě jet.
Dovolte mi, abych obnovit to.
A teď vidím app.js kód, který jsem se právě díval na
ale zde v konzole.
Takže teď, když se snažím spustit to, můžete vidět, že se zastaví.
Je to jen čeká, protože jeho Celá spuštění kódu je nyní
zastavil na tomto debugger řádek, který jsem tam dal.
A můžu teď serveru -
[Neslyšitelný Poznámka]
Jo, jo. Co je klíčové slovo zkratka pro zvětšení obrazovky?
No tam je.
Mám to. OK.
[Pause]
Oh, to nevypadá [Fonetický], že.
Takže, kurzy je opravdu velký
protože já nedělám ustanovení nebo něco omezit,
je to jen načítání Celá databáze kurzů
které jsou hodně z nich.
A tak - což je objekt
že ve skutečnosti může selhat poznámka inspektor instance.
To je - OK.
Dovolte mi, abych to limit a pak můžeme se podívat
pokud to není načítání stovky kurzů.
Takže zabít serveru a inspektor
a já udělám kurs Dotaz kolekce limit 20.
Takže, regál, na rozdíl od Laravel
kde můžete jen zavolat omezit přímo nebo zavolat jakýkoli
z těchto metod SQL , který používáte
přímo na instanci ORM.
Kdykoliv se, že používáte pouze Metoda SQL, který je k dispozici
v Knex, musíte volejte na dotaz třídit
z kohoutku do dotazu řetězce.
A to může být vyvolán buď funkce,
takže můžete říct, funkce tento limit 10 nebo si ji zavolat
určením, který Metoda byste chtěli volat
na instanci Knex a pak se tato hodnota.
Takže jdeme na to Limit je 20 a pak nastavit.
My vlastně ne Potřebujete debugger zde
protože můžeme jen nastavit zarážky
a že usnadňuje.
Dobrá.
Takže, pojďme nastavit zarážku tady a pokusit se ji načíst.
Špatné vedení.
Přímo tady.
[Pause]
OK. Takže je to opět zastavil.
Takže teď, kurzy je objekt o délce 20
a můžeme vidět všechny různé modely, že je to přitažené za vlasy
z databáze tady tak jsem dostal model objektu
která má uvnitř atributy nemovitosti
na objektu jsou všechny ty věci, že je to v databázi nalezen.
Všechny události, které mají zapsána
takže se můžete zaregistrovat různé akce,
například když Model je odstraněn
nebo když je to být přitažené za vlasy,
můžete nastavit různé vlastnosti nebo změnit věci.
Tam je mnoho různých háčků a ty jsou zdokumentovány
v Bookshelf.js dokumentaci, která vám umožní
dělat jakousi cokoliv že opravdu chcete dělat
se svými modely a sbírek.
Můžete si - jsou to znamenalo, být opravdu přizpůsobitelné
a pro rychlé můžete je upravovat
potřebám vašeho aplikace.
Ale jen se dívá skrz tu,
Vidím to, co jiný kurzy jsou k dispozici.
A v tomto případě, jsem vlastně ani načíst
s jakýmikoli jinými daty, než jen samotné kurzy.
Ale v podobným způsobem Eloquent ORM můžete nastavit
se vztahy, tak samozřejmě Patří k mnoha instruktora.
Takže, když jsem se do toho pusťte a ukončit aplikaci,
skočit na to načíst hovor, můžete Můžete určit různé možnosti
že byste chtěli předat k ní.
A jedním z nich je schopnost naložit související kód
zadáním withRelated instruktoři pak kurzy.
Takže pojďme zpět a čerstvé to sem a zastavit znovu.
Takže teď, kurzy objekt, stejný počet modelů,
ale teď každý model má hash vztahy
která má instruktory že to souvisí.
Takže tento kurz například
což je samozřejmě 082 má dva související instruktora modely.
A můžete již vidět, jak mnohem jednodušší, to je třídit
vizuálně pracovat, než když máte co do činění s věcmi
že jste nějak změnit kód a pak to zkusit znovu v PHP.
Skutečnost, že můžete jen zastavit popravu zcela
a vyhodnotit, co je tady a - v konzoli, -
vzdálíte, kurzy je, víte,
co to místní působnosti proměnné jsou k dispozici
a to je v současné době globální objekt, protože, jak jste ho viděli,
pokud budete volat s specifický kontext, že to nebude
mít něco relevantního zde.
A pak - mi dovolte, abych ukázat několik dalších příkladů
provádění sliby.
Takže místo toho, jak to udělat withRelated instruktoři zde Mam
jít dál a přesunout tento načíst a pak kurzy,
Chystám se vrátit courses.load instruktoři.
A pak - pak budete volat poté.
[Pause]
Takže v tomto bodě, kurzy by měly být načten
s instruktory, které je asynchronní akce.
Ale protože jsme ji vracet od slibu, další hodnota
protože pak je, co to asynchronní vrátí volání
který v tomto případě zatížení je metoda regál
že ve skutečnosti se vrací Sbírka sám.
Takže je to načítání instruktoři tam
a pak můžete zadat - pokud je to jen jedna vlastnost,
můžete specifikovat jako řetězec, jinak,
můžete dělat instruktory a požadavky
jako metoda - Omlouvám se, jako pole.
A pak, pokud chcete, aby se opravdu fantazie a omezit jakékoliv
z nich vzhledem stáhne, můžete můžete zadat jako hash
s instruktory a pak to, co Chcete omezit dotaz na.
Takže bych chtěl načíst všechny Instruktoři na kurzech, kde -
takže QB pro Query Builder kde je aktivní stav.
A můžete získat opravdu fantazie s některou
ze souvisejících dotazů byste chtěli stavět.
Ale právě teď, jdeme držet se několika instruktory
a vracíme tuto hodnotu
takže pak další a pak by měl mají všechny kurzy vložen
správně.
A pokud došlo k chybě v každém kroku v tomto řetězci,
to by skočit dolů na západku.
Tak pojďme do toho a spustit to.
Takže pokaždé, když - na rozdíl od PHP, jedna nevýhoda je,
"Protože uzel" je dlouhý běh Proces, co skutečně potřebujete
k zastavení procesu uzlu jak si aktualizovat svůj kód,
protože verze, která je běží v běhu je,
verze kód, který je načten
při spuštění není co máte druh
aktualizovaných kód se od té doby.
OK. Budeme nastavit zarážku zde, zde a refresh.
[Pause]
No, já vlastně ne obnovte tuto stránku buď
tak to bylo na starém procesu.
Takže si aktualizovat jak to a uzel inspektor.
Takže teď vidíme kurzy.
Pokud budeme jen vzít vzorek z jednoho z těchto modelů,
můžeme vidět, že vztahy Objekt je prázdný, ale nyní -
a důvod, že budete potřebovat nastavit zarážky je dobře,
Jsem se zmínil, že můžete skok do trasování zásobníku
a uvidíte, víte, kde to se děje v aplikaci.
Takže teď vidím, co je děje v metodě zatížení,
které jsem definována Na sbírek.
Tak nějak "Eager zatížení vztahy na již ".
A můžete krokovat a uvidíte, řádek po řádku
kde tohle je děje, což je skvělé.
Máte-li něco , který je rozdělen do kódu,
je to házení nějaké chyby a jsi jako, opravdu chci
vidět, kam to směřuje.
Ale jakmile se dostanete do něco asynchronní, -
to jde na další zaškrtněte smyčky událostí
a vy přijdete o - ztratíte místo
v uzlu inspektora.
Takže je potřeba říci, "OK, jakmile jsem ztratil to,
je třeba přestat v Znovu této linie. "
"Protože když jsem bušil dolů, dolů zásobníku,
to bude mít nakonec jen pryč už jsem to nastavit tento
řádek 22 modři zlomu řádku.
Takže teď, když se dívám v kurzech zde,
by měl na vztah instruktoři
a pak instruktoři připojte je.
Takže můžete vidět, že jsem se vrátil slib od prvního slibu
a pak můžete průběžně to, že na celé čáře.
Takže různé slib, Slibuji knihovny,
Použil jsem jeden s názvem Bluebird což je opravdu užitečné.
To přidává spoustu hezké to pro změnu asynchronní -
měnící se hovor zpět základní kód do věci
že funguje dobře sliby.
Ale - sorry [neslyšitelný], co Chtěl jsem, aby to tam říct.
Pojďme se podívat i když na -
takže řekněme, že to tam bylo Problém při načítání něco.
Takže mám tu druhou cestu najít s názvem kurzu ID.
Takže pojďme udělat kurz 2.
Mohu dostat - JSON kurz.
A to dělá [slyšet].
[Pause]
Cítím něco špatně zde.
Ne na 3000, byl jsem na Karta inspektor Chrome.
OK. Tak pojďme na Samozřejmě - JSON hřiště 1.
A to se vrátí jen v JSON formát, samozřejmě naložené
s některými instruktory.
Ale například jsem chtěl aby je, že,
Dělám JSON kurzu ID.
A v vynést parametrů, Já určení vyžadují pravda,
což je možnost, která je dokumentovány v Bookshelf
kde se říká, že "Je-li, Snažím se najít tento kurz
a to tam není, pak hodit chybu. "
A že by měly být podchyceny catch blok sem.
Tak pojďme do toho a skok zpět do uzlu inspektora a zkuste
a zlomit to, a vidět to, co máme.
Takže pojďme nastavit pauzu tady na hřišti JSON.
Dobrá.
Půjdu do JSON kurzu a Já bych jen dát do některé z nich -
[Pause]
To může být trochu složitější Někdy, když se snažíte
pro správu, který z nich byla aktualizována
a které ne - uvidíme.
Takže to volá chybu prázdná odpověď.
[Pause]
Pojďme hodit debugger zde.
Vzhledem k tomu, jak uzlu skutečně optimalizuje
za běhu JavaScript se tak rychle na serveru,
Někdy uzel debugger má nějaké chyby, když se pokusíte
a nastavit zarážky dynamicky a skutečně potřebují
použít debugger a ne řádek po řádku.
Tak uvidíme, jestli to nám dostane to, co chceme.
Tak jsem nastavit, app.get json samozřejmě id,
a já jsem nastavit můj debugger zde
v příkazu catch ve spodní části.
Fetch vyžadují pravda, že by - v pořádku, tam jdeme, zlomil.
Tak, teď vidím, že se zastavil
v tomto posledním bloku catch protože withRelated -
nebo proto, že vyžadují pravda specifikovány a není samozřejmě
s ID této velké číslo přes výjimku
který je nyní Emessage.
A každá chyba v JavaScriptu má zásobník nemovitosti
který je dodáván spolu s ním.
Tak to je často užitečné Chcete-li například,
konzole odhlásit e.stack.
A já si skutečně vidět když jsem narazila chybu.
Tak jsem si chybu prázdný odpověď, že je to zpráva
že byla odeslána přes regál.
Ale teď, můžu se podívat u, v zásobníku volání a vidět
že v Bookshelf dialekty SQL modelu 83,
tento prázdný odpověď byla vyvolána chyba.
A to je místo, kde jsem již bylo zmíněno, je to tečka anonymní
protože je to anonymní funkce.
Kdyby to byla funkce název budete mít lepší nápady
, na které fungují ve skutečnosti přes aniž by museli jít
do model.js kódu.
I když to má být docela, docela čitelné,
tak vidím, že on-line.
Co říkají mě bylo linka 83.
Takže, je-li a options.require neexistovala odpověď,
nyní se vrhá nové prázdný reakce na chybu.
Takže můžete vidět pěkně jednoduché, jak to funguje.
A interně regál,
tam jsou jen celek banda použití slibů.
Takže si můžete určit, Promise.method
s Bluebird knihovnou který udržuje správný kontext
z toho, když se vracel slib.
A tak jsem se - mám vázání Hodnota, kterou to podobné
k tomu, co jsem zmínil dříve, ale s použitím sliby
a pak jsem si - je nový.
To může být asynchronní nebo ne, pokud chci.
A pak jsem si některé další věci, které mohou být
nebo nemusí být asynchronní a pak druhy skoků dolů to.
Takže Promise.all je pomocník, který Mnoho populárních knihoven mají
kde můžete mít řada potenciálně může
nebo nemusí být sliby.
A jakmile všichni ti jsou dokončeno, se vrátíte, že
a pak to skočí na další řádek
a vidíte, jak to ve skutečnosti zplošťuje pyramidu
že dostanete, callback peklo jako jeho známý
pokud děláte vše s zpětná volání řádek po řádku.
Existují způsoby, jak se dostat kolem to, ale sliby jsou jedním
z nejlepších způsobů, jak podle mého názoru
opravdu udržet svůj kód čisté a snadno čitelné.
Takže to je jen krátký Úvod do JavaScriptu
a na regál a Knex obecně.
A pokud tam je nějaké otázky, Vím, že to tuny materiálu
se trochu snažit a kryt zejména proto, že jazyky,
na rozdíl od většiny, že jste seznámit se tak jen jsem chtěl
aby se to tak, že alespoň pokud máte problémy
s kódem, můžete může trochu skočit -
to je to, co jsem chtěl udělat, je druh skočit do knihovny
že jsem pomocí a viz jak věci jsou strukturovány.
Je tu ještě jedna, které jsem se zmínil dříve volal Backbone.js
a ve skutečnosti je to [Neslyšitelné] na straně klienta
pomoci, aby pohled modelu Struktura regulátoru
do svého kódu.
Ale ve skutečnosti má komentovaný zdrojový dokumentace
který vám umožní trochu vidět.
Je to opravdu dobře dokumentováno, co se děje,
jak se to rozšiřovat funkce Ajax
nebo funkce událost nebo modely a kolekce druh
vysvětlovat, co je se děje v procesu.
A jestli mi rozumíte základy JavaScriptu
jako prototypal dědictví a jak se používá funkce
jako oba objekty a hodnoty a třídy a všechno.
To dělá to mnohem jednodušší pochopit, co se děje
na potenciálně knihovny, které jste pomocí
a ladicí kód a musí být schopen nebýt bouchání hlavou
proti zdi, protože nechcete pochopit, jak
různé kusy pracují, tak.