>> Així que, amb això es diu,
només una espècie de simple introducció als prototips
i el model d'objectes de JavaScript.
No canviarem engranatges una mica per parlar
Sobre Més JavaScript a la servidor i la Biblioteca Biblioteca
i la connexió Knex Biblioteca.
Així que, en realitat es pot simplement -
si busca Bookshelf.js que hauria de ser bastant fàcil
per trobar, ha de ser primer En conseqüència, i de prestatgeria
com David esmenta només dóna molta estructura
al voltant d'objectes de JavaScript i treballar amb ells relacionalment
en bases de dades relacionals.
Per tant, una gran quantitat de característiques similars que en realitat inspirat en gran mesura
per ORM de Laravel com així com la Backbone.js,
que és un front-end MVC biblioteca que li permet
l'estructura del seu codi, similar al que m'estava mostrant
amb els exemples de la prototips on es pot -
en lloc de només arbitràriament classes llençar
en els seus punts de vista aquí i allà.
Li dóna els models i col · leccions d'aquests models
que se suposa que actuarà com tipus d'un sol punt de la veritat
sobre les dades per seva aplicació.
I llavors s'escolta, com els Models canvis, diuen, OK,
tornar a fer aquesta plantilla aquí i aquest per aquí
i no afegint la classe aquí, afegir la classe i no una espècie de recollir
selectors i fer que el teranyina de codi de jQuery.
Es dóna més d'un classista estructura de peces individuals,
però un component important de que biblioteca és els models
que tenen una estructura similar al que els models de prestatgeria fan.
Per tant, si vostè està familiaritzat amb el Prestatgeria que està bastant també
bastant familiaritzat amb Backbone.js models,
i recomanaria fer una ullada a això.
Així, algunes de les principals característiques
que dóna vostè és només el capacitat d'establir les dades en un objecte
trucar a buscar-me, que retorna un registre individual
de la base de dades, crear relacions tan similars
al que es reparteixen dins Laravel
on es pot dir que un pacient estableix un mètode de registre
i dir que això ha guanyat rècord
on l'objecte de registre és els registres de salut de nom de taula.
Anem a veure.
Té molts - a què pertany -
només coses que ets bastant similars -
bastant familiaritzat amb ja, però en JavaScript.
I sota el capó, per a la Biblioteca,
que utilitzant un generador de consultes anomenat Knex.js.
Llavors, això és Knex, knexjs.org.
És una referència a la joguina si algú alguna vegada ha jugat amb això.
Però li permet - en un De manera similar, per jQuery,
que només una espècie de crear un cadena de diferents mètodes
que vostè està demanant al seu fila de base de dades perquè pugui -
començar per dir Knex i el nom de la taula.
Així, per exemple, usuaris, Knex seleccionar quines columnes desitja,
on, i tenen diferent on condicionals i vostè pot tenir
I on, o quan, on entre, on no,
ara, en la línia.
Podeu especificar diferents combinacions entre les taules de la base de dades
Biblioteca que utilitza internament per establir una mena de màgia
al voltant del hasOne, hasMany, belongsTo, belongsToMany.
I el que la combinació
dels dos li permeten fer bastant molt és el que estàs acostumat
en el marc com Laravel en termes
de funcionalitat de treball amb les bases de dades.
Per tant, seguirem endavant i prendre un cop d'ull a un exemple senzill
per una app Express, que fa ús d'aquests models
i col · leccions de Biblioteca jazz [fonètic].
Per tant, he creat només un senzilla aplicació aquí.
Em despullar a terme algunes de les coses que va ser inicialitzant expressa
i moure que en un init directori que he creat.
Una de les coses bones de treballar amb Express com a suposada
a Laravel és que hi ha Realment no hi ha molt forçada
en vostè convencionalizada.
Així que vostè pot crear directoris -
que en realitat no et donen molt de treballar fora de.
Vostè té només una espècie d'alguns configuració bàsica i després -
però no li importa on se'ls posa.
No ha de tenir directori del controlador.
Vostè no necessita tenir un model de directori, un directori de configuració.
Podeu crear una mena de aquells com les seves necessitats de projectes
i establir les coses de la manera que té sentit més a vostè.
Així que en lloc de tenir tot aquest text model express
en les principals app.js acabo de dir iguals d'aplicacions requereixen init / exprés.
I així, en l'inici,
la carpeta inicialitzar Acabo d'expressar aquí,
i això requereix Express, trucades la funció de configuració, truca al -
configura el motor de la vista, Analitzador JSON, tot això.
Així que ara, continuarem cap avall.
Així que estic requerint la reunió instructor del curs
i els requisits dels models.
Així que aquests són en una carpeta que Vaig decidir models de nom.
No té per què ser manera però, té sentit,
però els models és només bonica comú, així que el recomanaria.
Però - Així que anirem per al curs.
Crec que estic fent servir - Sí, i els exemples
aquí es basen tots entorn del model de golf.
Així que anem a prendre una ullada a això.
Així que, ara, al costat de la primera línia d'aquest model,
Ja estic requerint alguna cosa més.
Així que si vostès es fixen en el node vostè ha d'estar requerint
o vas a acabar que requereix un munt
de diferents arxius que es troben
en diferents llocs en la seva aplicació.
I les rutes relatives a on sigui que estiguis
en la seva aplicació actual,
llevat que es tracta d'un nivell superior ia definit com pel que instal · les
amb MPM com prestatgeria o Knex o Express o alguna cosa,
aquests no són relatius.
Sí? Vagi més?
D'acord. D'acord. Per tant, vostè va a acaben requerint un munt
de poc diferents arxius en el seu codi, el que és bo i dolent.
En una bona manera de saber on les coses són i no és una espècie
de la màgia del que és passant sota el capó,
el que realment pot ser confús
quan es té un molt pesada Java -
o un marc molt pesat com Laravel, quin tipus de diu,
anem a tenir cura d'aquesta manera vostè no ha
per requerir tot però cal
saber com tot treballa per tal d'usar-lo.
Quan, com en aquest cas, és molt senzill pel que fa a
on està tot, són només extrems
és una mica més a escriure.
Igual que a la banda m'agrada utilitzar, hi ha un plugin
si s'utilitza un text de prova
on es pot instal · lar el node mòduls d'ajuda i es pot començar
escriure com a instructor i es crea la ruta relativa
on està fins que arxiu de codi, tipus d'utilitat.
Així, el model de curs està requerint base aquí
i després passant de base requereix init / prestatgeria
i després la Biblioteca, es requereix de la Biblioteca de nivell superior
i després inicialitza amb la instància Knex inicialitzat,
que estableix el nom del client
i la connexió configuració de la base de dades.
Així que estic fent servir un simple instància de Sequel Pro, que -
de MySQL, estic accedint a ella amb Sequel Pro i acaba d'ordenar
d'una base de dades similar configuració, ja que tenia
en la primera aplicació de la mostra amb el catàleg de cursos.
Per tant, em vaig posar la meva connexió ajustos,
i tots ells estan documentats a la pàgina del projecte Knex.js
sobre la configuració aquestes connexions.
Així que, ara tinc el meu model base.
I com vaig esmentar amb el canvi de prototip,
de manera que en realitat es pot ser una mica molt per -
afegeix una gran quantitat de text model al seu codi per a convencions
que ha estat adaptat per Backbone.js
i ara és Bookshelf.js afegir aquest mètode s'estenen
com una propietat estàtica en seus objectes de JavaScript,
el que li dóna una mena de gairebé naturalesa herència basada en la classe
on si vostè diu estendre vostè pot crear qualsevol
dels mètodes de prototip que desitja aquí
i llavors vostè pot - qualsevol mètodes estàtics addicionals
que és possible que vulgueu, vostè només pot establir vostès mateixos
aquí així que puc estendre amb - així que si per exemple,
múltiples models necessaris mostrar el nom i el nom d'aconseguir.
Així doncs, aquí, estic dient la nom de visualització per al model
per defecte s'utilitza el seu nom propietat és el contrari de retorn
sense nom.
I ara cada model que és una -
que s'estén aquest model base, que ara tenen un mètode de nom per mostrar
en el prototip cadena en algun lloc.
I si vull sobreescriure Jo només puc configurar - establir què -
getName seria aquí.
I que li permet imitar herència clàssica
en JavaScript, que pot ser bonic particular per les coses
que es presten a ser classe base com a models d'objectes.
Així que anem a saltar de nou en el codi de l'aplicació.
Així que tinc una ruta per només slash, només per a mi índex
i després retallar cursos.
I tots dos estan trucant el mètode renderCourses.
Així que de nou, les funcions són primera classe i pot ser passat
com a arguments als mètodes.
Així, en aquest app.get, Vaig a trucar -
Estic passant renderCourses com a argument.
I fer - o funcions pot ser configurat com var -
ja que estava fent var anterior renderCourses funció és igual a
o poden ser simplement renderCourses de funció.
No té massa gran part de la diferència.
En realitat es pot tenir el s'anomenen funció nom
expressions, que són renderCourses var iguals
renderCourses de funció.
I la raó per voler tenir nomenar funcions particularment
en el node és que li dóna un netejador -
seguiment de la pila més llegible.
Així que si vostè té un munt
de funcions anònimes dirà -
quan es té un error Et al teu codi -
vostè no sabrà quina funció està trucant vostè hauria de buscar
en el número de codi i el número de línia
i que de vegades és més fàcil només per analitzar visualment
quan en realitat tenen noms
per a les funcions si mateixos en el costat del servidor.
Pel que aquest renderCourses, anem a trucar a les aplicacions de node -
pel que estic escoltant en Core 3000 [fonètic].
I així, tot això està fent bé Aquí és només obtenir tota la
els cursos de la base de dades.
Ni tan sols estic limitar pel que està fent un nombre enorme
de files que està tornant.
I per tal de fer això,
en el model descomptat que és una propietat estàtica
anomenada col · lecció.
I pel que només ho dic - I dir a crear una nova col · lecció
per a aquest curs, i després portar el menjar,
i després tornar als cursos col · lecció aquí a la promesa.
Així que internament, en David - la última meitat va ensenyar una mica
sobre les promeses i promeses són usat molt pesadament en tant Knex
Biblioteca i perquè es presta el -
te la dóna capacitat de tenir un munt
de diferents trucades asíncrones i una espècie d'unir-se després junts
o anar a buscar alguna cosa, i després
amb aquesta crida una altra anomenada base de dades asincrònica
i retornar aquest valor i a continuació, passar a la següent i després
i al costat de continuació i després tenir un agafar al final per ordenar
d'imitar intent de captura asincrònica comportament amb codi asíncron,
perquè vostè està veient ara
però és encara més difícil una vegada comences a tractar amb ell.
Codi asíncron és just a tot arreu
al costat del servidor i JavaScript realment en un grau molt més gran
el que estem acostumats a si que has fet JavaScript
al costat del client.
Així que realment, realment Vostè ha ajudat a que hi ha.
Però només per mostrar la instrucció debugger
que jo estava parlant en les eines de l'inspector de node,
Vaig a seguir endavant i llançar una línia depurador aquí
en la funció renderCourses i veure on em porta
quan - de manera que el node inspector pot ser instal lat
fent NPM Install amb una bandera G,
el que significa Global Inspector de node.
I va a buscar ell per al NMP i instal a nivell mundial
per les seves aplicacions de manera que només es pot trucar
des de la línia d'ordres.
Jo ja he instal · lat és així que seguiré endavant i -
en realitat podria tenir esperar que només prendrà,
prendre dos segons.
I què inspector node de nou li permet
de fer és tenir aquest sense cap versió de la consola del depurador
que vostè està acostumat a l'hora de treballar en el costat del client i ser capaç
per aturar, simplement afegeix especificada punts en el codi.
Aturar l'execució i prendre una mirar el que està passant,
que tindria realment molt útil si la funció
així eren
quan la depuració de la Codi PHP que estic segur.
Així que anem a prendre una ullada a això.
Així que només puc cridar inspector node
i que dirà visitar aquest URL port 5858 per iniciar la depuració,
això és només el valor per defecte per la forma en què es posa en marxa.
Per tant, ara tinc - no hi ha res a fer aquí
perquè he de començar.
Així node impàs [fonètic] la indicador de depuració i després app.js.
Per tant, diu depurador escolta al port 5858,
Escolta Server Express en 3000.
Així que estem bé per anar.
Permetin-me tornar a carregar aquesta.
I ara puc veure els app.js codi que m'estava mirant
però aquí a la consola.
Així que ara, si intento executar aquest, es pot veure, s'atura.
Simplement està esperant perquè el seu tota l'execució de codi és ara
detingut en aquest depurador línia que he posat aquí.
I ara puc servidor -
[Inaudible Observació]
Oh, si. Quina és la paraula clau drecera per ampliar la pantalla?
Oh no.
Ho tinc. D'acord.
[Pausa]
Oh, no està mirant [Fonètic] que.
Així, els cursos és molt gran
perquè jo no estic fent un clàusula o res d'limitar,
és només anar a buscar la tota la base de dades de cursos
que són un munt d'ells.
I així - que és objecte
que en realitat podria estavellar la instància inspector nota.
És - D'acord.
Permetin-me fer un límit i llavors podem fer una ullada
quan no és anar a buscar centenars de cursos.
Per tant, matar el servidor i l'inspector
i faré curs límit de consulta de recollida 20.
Així, en Bookshelf, a diferència de Laravel
on només es pot trucar limitar directament o trucar a qualsevol
d'aquests mètodes de SQL que utilitzi
a directament en la instància de ORM.
Cada vegada que vostè està utilitzant només Mètode SQL que es proporciona
en Knex, vostè ha de truqui a la consulta per ordenar
d'aprofitar la cadena de consulta.
I això pot ser invocada ja sigui amb una funció,
pel que es pot dir, la funció aquest límit de 10 o vostè l'anomena
especificant que mètode voleu marcar
en la instància Knex i després quin valor.
Així que farem limitar 20 i ajust.
En realitat no fem necessitarà depurador aquí
perquè podem simplement establir punts d'interrupció
i això ho fa més fàcil.
Està bé.
Per tant, anem a establir un punt d'interrupció aquí i tractar de carregar.
Línia incorrecte.
Just aquí.
[Pausa]
D'acord. Per tant, es va aturar de nou.
Així que ara, els cursos és una oposar-se amb longitud de 20
i podem veure tots els diferents models que és improbable
des de la base de dades aquí així que tinc un objecte del model
que té, dins de la atributs de la propietat
en l'objecte són totes les coses que ha trobat a la base de dades.
Tots els esdeveniments que tenen estat registrat
perquè et registris diferents esdeveniments,
per exemple quan el S'està eliminant el model
o quan s'han recuperat,
Podeu establir diferents propietats o modificar les coses.
Hi ha un munt de diferents ganxos i tots ells estan documentats
en els Bookshelf.js documentació que li permeti
fer una mena de res que realment vol fer
amb els seus models i col · leccions.
Vostè pot - que estan destinats per ser realment personalitzable
i realment fàcil per a adaptar els
a les necessitats del seu aplicació.
Però només mirar per aquí,
Puc veure el que els diferents els cursos estan disponibles.
I en aquest cas, en realitat no buscar
amb qualsevol altres dades que no siguin només els propis cursos.
Però de manera similar a l'eloqüent ORM pot establir
les relacions, de manera que el curs pertany a molts instructor.
Així que, si segueixo endavant i aturar l'aplicació,
saltar a la recerca de trucada, poden especificar diferents opcions
que desitja passar al llarg d'ella.
I un d'ells és el capacitat de càrrega de codi relacionat
especificant withRelated instructors després cursos.
Així que anem a tornar i fresc això aquí i deixar de nou.
Així que ara, els cursos objecte, mateix nombre de models,
però ara cada model té un hash de les relacions
que compta amb els instructors que és relacionada a.
Així que aquest curs, per exemple,
que és per descomptat 082 té dos models instructor relacionats.
I ja es pot veure com molt més fàcil és classificar
de treballar visualment amb què quan vostè està tractant amb coses
que classe de canviar el codi i després intentar-ho de nou en PHP.
El fet que vostè pot simplement aturar l'execució íntegrament
i avaluar el que és aquí i el - a la consola, el -
allunyar, cursos és, ja saps,
qual cosa l'àmbit local, variables estan disponibles
i això és actualment el mundial objecte perquè ja ho has vist,
llevat que vostè diu amb una context específic, que no va
tenir alguna cosa rellevant aquí.
I llavors, el - em va deixar mostrar alguns exemples més
la implementació de les promeses.
Així que en comptes de fer això instructors withRelated aquí estic
seguirà endavant i avançar en aquest a buscar i després dels cursos,
Vaig a tornar instructors courses.load.
I llavors - a continuació, es diu a continuació.
[Pausa]
Llavors en aquest punt, la cursos han de carregar
amb els instructors, que és d'acció asincrònic.
Però com que estem tornant d'una promesa, el següent valor
doncs llavors és el que sigui això devolucions de trucada asincròniques
que en aquest cas de càrrega és un mètode en el Prestatge
que en realitat retorna la col · lecció en si.
Així que ha de carregar el instructors en allà
i llavors vostè pot especificar - si és només una propietat,
pot especificar aquesta com a cadena, en cas contrari,
vostè pot fer els instructors i els requisits
com a mètode - ho sento, com una matriu.
I després, per obtenir realment de luxe i restringir qualsevol
d'aquests donen recuperacions, que pot especificar com un hash
amb els instructors i després el que desitja limitar la consulta a.
Per tant, m'agradaria carregar tots instructors en cursos on -
així QB per a generador de consultes on l'estat està actiu.
I vostè pot aconseguir realment fantasia amb qualsevol
de les consultes relacionades vol construir.
Però, per ara, anem enganxar-se a només instructors
i estem retornant aquest valor
per la qual cosa després el següent i després ha de tenen tots els cursos carregats
correctament.
I si hi va haver un error en qualsevol pas en aquesta cadena,
seria saltar a la captura.
Així que seguirem endavant i córrer això.
Així que cada vegada que - a diferència de PHP, un desavantatge és el
"Perquè el node" és una llarga marxa procés, en realitat es necessita
per aturar el procés de node com actualitzar el seu codi,
perquè la versió que és s'executa en el temps d'execució és,
la versió de la codi que va ser carregat
quan no s'ha iniciat el que té una espècie
d'actualització del seu codi amb des de llavors.
D'acord. Anem a configurar un punt d'interrupció aquí, aquí i actualització.
[Pausa]
Oh, en realitat no ho vaig fer tornar a carregar aquesta pàgina sigui
així que estava en el procés anterior.
Així que actualitza tant aquest i l'inspector node.
Així que ara veiem cursos.
Si només prenem la mostra d'un d'aquests models,
podem veure que les relacions objecte està buit, però ara -
i la raó que vostè necessita establir punts d'interrupció és, bé,
Vaig esmentar que pugui saltar al seguiment de la pila
i vegi vostè sap, on que va en l'aplicació.
Així que ara puc veure el que hi ha succeint en el mètode de càrrega,
que he definit a les col · leccions.
Quin tipus de "càrregues Eager relacions en un ja ".
I vostè pot caminar a través d' i veure línia per línia
on aquest material és va, que és genial.
Si vostè té alguna cosa que s'ha trencat en el codi,
És tirar una mica d'error i vostè és com, realment vull
per veure a on va això.
Però tan aviat com arribes a tenir alguna cosa asíncrona, el -
que va a la següent paparres del bucle d'esdeveniments
i perdràs la teva - vostè perd el seu lloc
en l'inspector de node.
Així que cal dir, "Està bé, un cop que em perdo això,
ha de parar ara en aquesta línia de nou. "
Perquè si seguia colpejant baix, baix de la pila,
tindria finalment acaba desaparegut no havia posat aquesta
la línia 22 de línia de ruptura blau.
Així que ara, si miro a cursos aquí,
el que hauria en relació instructors
i després tenir la instructors els atribueixen.
Així, es pot veure que vaig tornar una promesa de la primera promesa
I llavors vostè pot contínuament fer això en la línia.
Així que la promesa diferent, prometre biblioteques,
He utilitzat una trucada Bluebird que és realment útil.
Afegeix un munt de bonic d'aquest per canviar asíncron -
canviant trucada de tornada codi base a coses
que funciona bé amb promeses.
Però - ho sento [inaudible] el Anava a dir que no.
Fem una ullada encara que al -
així que diguem que hi havia un problema en anar a buscar alguna cosa.
Així que tinc aquesta altra ruta trobar denominat ID clar.
Així que farem curs 2.
Puc obtenir - Curs de JSON.
I això ho fa [inaudible].
[Pausa]
Oloro alguna cosa malament aquí.
No en 3000, jo era a la pestanya inspector Chrome.
D'acord. Així que anirem a Per descomptat - JSON curs 1.
I això torna just a JSON format, el curs carregat
amb alguns instructors.
Però l'exemple que volia donar aquí és que,
Estic fent JSON suposat ID.
I en els paràmetres de cerca, Estic especificant requereix cert,
que és una opció que està documentat en Bookshelf
on es diu que: "Si, Tracte de trobar aquest curs
i que no hi és, després llençar un error ".
I això hauria de ser capturats per el bloc Catch aquí baix.
Així que seguirem endavant i saltar de nou en l'inspector de node i provi
i trencar aquest i veiem el que tenim.
Així que anem a establir un descans aquí al curs JSON.
Està bé.
Aniré al curs JSON i Em acaba de posar en un cert -
[Pausa]
Pot ser una mica difícil de vegades, quan vostè està tractant de
per gestionar els quals un ha estat renovat
i que tenen no - anem a veure.
Pel que és error de cridar resposta buida.
[Pausa]
Anem a llançar un depurador aquí.
A causa de com node realment optimitza
per al temps d'execució de JavaScript ser tan ràpid en el servidor,
de vegades el depurador node té alguns errors en intentar
i establir punts d'interrupció dinàmicament i que en realitat no necessita
utilitzar un depurador i no la línia per línia.
Així que anem a veure si aquesta ens porta al que volem.
Així que em vaig posar, app.get Identificació del curs json,
i he posat el meu depurador no
en la declaració de captures a la part inferior.
Fetch requereix cert, s'ha de - bé, aquí anem, vam trencar.
Així que, ara que puc veure que va deixar de
en aquest últim bloc catch perquè el withRelated -
o perquè la requereixen cert especificat i no hi ha curs
amb la identificació d'aquesta gran nombre a través d'una excepció
que ara és eMessage.
I cada error en JavaScript té una propietat pila
que ve juntament amb ell.
Així que sovint és útil a, per exemple,
consolar desconnectar e.stack.
I jo realment puc veure quan vaig arribar a un error.
Així que em dóna error buida resposta, aquest és el missatge
que va ser enviat a través de prestatgeria.
Però ara, puc fer una ullada al, en l'anomenada pila i veure
que en Bookshelf model de dialectes SQL 83,
aquesta resposta buida va ser llançat error.
I aquí és on em esmentat, que és punt anònim
perquè és un anònim funció.
Si això fos una funció de nom vostè hauria millors idees
a la de funcionar en realitat a través sense haver d'anar
en el codi model.js.
Tot i que està destinat a ser bastant, bastant llegible,
pel que puc veure que en línia.
Què els diuen em vaig quedar la línia 83.
Així que, si options.require i la resposta no existia,
ara llança una nova error de resposta buida.
Així es pot veure bastant senzilla com funciona.
I internament en Bookshelf,
no ets més que un tot munt d'ús de promeses.
Així que vostè pot especificar Promise.method
amb la biblioteca Bluebird que manté el context correcte
d'aquesta quan tornava una promesa.
I pel que he - Estic vinculant el valor d'això similar
al que jo havia esmentat anterior, però utilitzant promeses
i llavors puc - és nou.
Pot ser asíncron o no si vull.
I llavors faig una mica altres coses que pot
o no pot ser asíncron i a continuació, les classes de salts cap avall això.
Així Promise.all és un ajudant que una gran quantitat de biblioteques populars tenen
on es pot tenir un sèrie de potencialment poden
o no ser promeses.
I una vegada que tots aquests són completat, tornarà que
i després salta a la següent línia
i es pot veure com és realment s'aplana la piràmide
que vostè aconsegueix, infern devolució de trucada com la seva coneguda
si està fent tot el amb devolucions de trucada de línia a línia.
Hi ha maneres d'evitar però que les promeses són una
de les millors maneres al meu entendre
per mantenir realment el seu codi net i fàcil de llegir.
Així que és només un curt introducció a JavaScript
i per Bookshelf i Knex en general.
I, si hi ha qualsevol pregunta, Sé que és una tona de material
per tractar de coberta tipus de sobretot perquè les llengües,
a diferència de la majoria que són familiaritzat amb així que només volia
per fer-ho de manera que almenys si vostè està tenint problemes
amb el codi, pot espècie de saltar -
això és el que m'agrada fer, és espècie de saltar a les biblioteques
que estic fent servir i veure com s'estructuren les coses.
N'hi ha un que m'havia esmentat anterior anomenat Backbone.js
i en realitat és [Inaudible] al costat del client
per ajudar a donar vista de model estructura del controlador
al seu codi.
Però en realitat té font de documentació anotada
que li permet veure una mena de.
És realment així documentat, el que està passant,
com està augmentant la funcionalitat d'Ajax
o la funcionalitat esdeveniment o els models i col · leccions espècie
d'explicar el que és passant en el procés.
I si vostè entén els conceptes bàsics de JavaScript
com l'herència de prototips i com s'utilitzen les funcions
ja que tots dos objectes i valors i les classes i tot.
Això fa que sigui molt més fàcil per entendre el que està passant
en potencialment al les biblioteques que utilitzeu
i depurador de codi i ser capaç llevat que colpeja el seu cap
contra la paret perquè vostè no entén com el
diferents peces estan treballant, així que.