>> Così, con questo detto,
solo una sorta di semplice introduzione a prototipi
e il modello a oggetti JavaScript.
Non stiamo andando a spostare ingranaggi un po 'a parlare
qualcosa di più JavaScript sul server e la Biblioteca Bookshelf
e il collegamento Knex Biblioteca.
Quindi, si può effettivamente solo -
se si cerca Bookshelf.js dovrebbe essere abbastanza facile
da trovare, dovrebbe essere il primo Di conseguenza, e Bookshelf
come David menzionato solo dà un sacco di struttura
intorno agli oggetti JavaScript e lavorare con loro relazionale
in database relazionali.
Così, un sacco di funzioni analoghe che in realtà è fortemente ispirato
da ORM di Laravel come così come la Backbone.js,
che è un front-end MVC libreria che permette
per strutturare il codice, simile a quello che stavo mostrando
con gli esempi del prototipi dove si può -
invece di arbitrariamente gettando le classi
il vostro punto di vista qua e là.
Ti dà modelli e collezioni di quei modelli
che dovrebbero fungere da sorta di un singolo punto di verità
Informazioni sui dati l'applicazione.
E poi si ascolta, come quelle Modelli modifiche, si dice, OK,
ri-renderizzare questo modello qui e questo qui
e non solo aggiungere classe qui, aggiungere classe ci e una sorta di accompagnamento
sui selettori e rendere l' ragnatela di codice jQuery.
Dà più di una base di classe struttura di singoli pezzi,
ma un componente importante di tale libreria sia i modelli
che hanno una struttura simile a quali modelli Bookshelf fanno.
Quindi, se si ha familiarità con l' Bookshelf sei abbastanza anche
abbastanza familiare con Backbone.js modelli,
e mi sento di raccomandare dare un'occhiata a questo.
Così, alcune delle caratteristiche principali
che ti dà sono solo l' possibilità di impostare i dati su un oggetto
chiamare fetch, che restituisce un singolo record
dal database, creare rapporti analoghi
a quello che avete affrontato entro in Laravel
dove si può dire una paziente stabilito un metodo di registrazione
e dire che questo ha vinto registrazione
dove l'oggetto record è nome della tabella documentazione sanitaria.
Vediamo.
Ha molti - a cui appartiene -
solo roba che sei piuttosto simili -
abbastanza familiare con già, ma in JavaScript.
E sotto il cofano, per Bookshelf,
utilizza un generatore di query chiamato Knex.js.
Quindi, questo è Knex, knexjs.org.
E 'un riferimento al giocattolo se Qualcuno ha mai giocato con questo.
Ma permette di - in un modo simile, a jQuery,
hai appena sorta di creare un catena di metodi differenti
che si sta chiamando sul riga di database in modo da poter -
hai iniziato dicendo Knex e il nome della tabella.
Così, per esempio, gli utenti Knex, selezionare le colonne che vuoi,
dove, e hanno se diverso condizionali e si può avere
E se, o quando, dove tra, ove non,
ora, su tutta la linea.
È possibile specificare diversi join tra le tabelle del database
che Bookshelf utilizza internamente di istituire una sorta di magia
intorno al hasOne, hasMany, belongsTo, belongsToMany.
E così la combinazione
dei due ti permette di fare abbastanza molto di quello che si sarebbe utilizzato
al quadro come Laravel in termini
di funzionalità lavoro con i database.
Quindi, andiamo avanti e prendere un'occhiata a un semplice esempio
per un app Express che fa uso di questi modelli
e collezioni di Bookshelf jazz [fonetica].
Così, ho creato solo un semplice applicazione qui.
Ho messo a nudo alcune delle cose che era in fase di inizializzazione esplicita
e spostare che in un init directory che ho creato.
Una delle cose belle di lavoro con espresso come supposto
a Laravel è che non c'è in realtà non molto forzata
su di voi conventionalized.
Così si può creare directory -
in realtà non ti danno un sacco a lavorare fuori di.
Hai appena sorta di alcuni impostazioni di base e poi -
ma non importa dove li metti.
Non è necessario avere directory del controller.
Non è necessario avere un modello directory, una directory config.
È possibile creare una sorta di quelli come le vostre esigenze di progetto
e impostare le cose il modo che rendono più senso per voi.
Così, invece di avere tutto questo boilerplate express
nelle principali app.js ho appena detto equals app richiedono init / express.
E così nel init,
la cartella di inizializzazione Ho appena ho espresso qui,
e questo richiede Express, chiamate la funzione di impostazione, chiama -
imposta il motore di visualizzazione, JSON parser, tutto questo.
Così ora, continuiamo verso il basso.
Così sto richiedendo l' riunione istruttore del corso
e requisiti di modelli.
Quindi questi sono in una cartella Ho deciso di modelli di nome.
Esso non deve essere così modo però ha senso,
ma i modelli è solo bella comune, così lo consiglierei.
Ma - Allora andiamo per il corso.
Penso che sto usando - Sì, e gli esempi
qui sono basati tutti attorno al modello corso.
Così facciamo solo prendere uno sguardo a questo.
Così, ora, solo della prima linea di questo modello,
Sto già richiedendo qualcos'altro.
Quindi, se si noterà nel nodo si dovrebbe essere meritevole
o si sta andando a finire che richiede un intero gruppo
file di diversi che si trovano
in luoghi diversi nell'applicazione.
E i percorsi relativi ovunque ci si trovi
nell'applicazione corrente,
se non è già un livello superiore definita come si installa
con MPM come Bookshelf o Knex o Express o qualcosa del genere,
quelli che non sono relative.
Sì? Zoom in più?
OK. OK. Quindi, si sta andando a finire richiede un intero gruppo
file di appena differenti nel vostro codice, che è buono e cattivo.
In senso buono si sa dove le cose sono e non è sorta
di magia di ciò che è succedendo sotto il cofano,
che può davvero essere fonte di confusione
quando si dispone di un pesante Java -
o quadro molto pesante come Laravel, che tipo di dice,
stiamo andando a prendersi cura di questo modo non è necessario
per richiedere tutto ma avete
per sapere come tutto lavora per usarlo.
Dove, come in questo caso, è molto semplice da
dove tutto è, sono solo le estremità
per essere un po 'più di digitazione.
Proprio come nella parte che mi piace da usare, c'è un plugin
se si utilizza un testo cieco
dove è possibile instal il nodo I moduli aiuto e si può iniziare
digitare come istruttore e crea il percorso relativo
a dove siete a che file di codice, tipo di operazione.
Così, il modello ovviamente si richiede di base qui
e poi la base intern richiede init / scaffale
e poi il Bookshelf, essa richiede l'Bookshelf livello superiore
e poi inizializza con l'istanza Knex inizializzata,
che imposta il nome del client
ed il collegamento impostazioni per il database.
Così sto solo usando un semplice istanza di Sequel Pro che -
di MySQL, sto accedendo con Sequel Pro e ha appena sorta
di un database simile configurazione come avevamo
la prima applicazione di esempio con il catalogo dei corsi.
Così, ho impostato la mia connessione impostazioni qui,
e questi sono documentati nella pagina del progetto Knex.js
su come impostare queste connessioni.
Così, ora ho il mio modello base.
E come ho già detto con il cambiamento prototipo,
in modo che possono effettivamente essere una specie di sacco a -
aggiunge un sacco di boilerplate per il codice in modo convention
che è stata adattata da Backbone.js
e ora è Bookshelf.js per aggiungere questo metodo si estendono
come una proprietà statica i vostri oggetti JavaScript,
che gli conferisce una sorta di quasi basato su classi natura ereditarietà
dove se si chiama estendere potete impostare qualsiasi
dei metodi prototipi che vuoi qui
e poi è possibile - qualsiasi metodi statici aggiuntivi
che si potrebbe desiderare, è può solo impostare loro voi stessi
qui così posso estenderlo con - quindi se per esempio,
più modelli necessari visualizzare il nome e questo nome ottenere.
Così, qui, sto dicendo l' nome di visualizzazione per il modello
Per impostazione predefinita, è tutto ciò che il suo nome proprietà è altrimenti ritorno
nessun nome.
Ed ora in poi ogni modello che è un -
che si estende questo modello base, ho ora hanno un metodo nome visualizzato
sul prototipo catena da qualche parte.
E se voglio sovrascrivere Posso solo impostare - impostare ciò -
getname sarebbe qui.
E ti permette di imitare eredità classica
in JavaScript, che può essere bello soprattutto per le cose
che si prestano se stessi di essere classe riferiscono come modelli di oggetti.
Quindi facciamo un salto indietro nel il codice dell'applicazione.
Così ho un percorso solo per tagliare, solo per il mio indice
e poi tagliare i corsi.
Ed entrambi questi stanno chiamando il metodo renderCourses.
Quindi, di nuovo, le funzioni sono prima classe e può essere passato
come argomenti ai metodi.
Quindi, in questo app.get, Sto chiamando -
Sto passando renderCourses come argomento.
E render - o funzioni può essere configurato come var -
come stavo facendo prima var renderCourses uguale funzione
oppure possono essere solo renderCourses funzione.
Non fa troppo molta differenza.
Si può effettivamente avere quello sono chiamati funzione nome
espressioni che sono renderCourses var equals
renderCourses funzione.
E la ragione a voler avere nominare funzioni particolarmente
nel nodo è che ti dà un pulitore -
stack più leggibile.
Quindi, se avete un sacco
di funzioni anonime si dirà -
quando si ha un errore nel codice avrete modo -
non si sa quale funzione si sta chiamando dovreste guardare
al numero di codice e il numero di riga
ed è a volte più facile solo per analizzare visivamente
quando in realtà hanno nomi
per le funzioni stessi sul lato server.
Quindi questo renderCourses, chiamiamolo apps nodo -
così sto in ascolto su Nucleo 3000 [fonetica].
E così tutto questo sta facendo proprio qui è solo ottenere tutte le
corsi dal database.
Non sto nemmeno limitandolo così che sta facendo un numero enorme
di righe è ritorno.
E per fare questo,
sul modello Naturalmente ci è una proprietà statica
chiamato collezione.
E così ho appena chiamo - I detto creare una nuova collezione
per questo corso, e poi prenderlo,
e poi tornare i corsi raccolta qui nella promessa.
Così internamente, David - l' metà ha insegnato un po '
sulle promesse e promesse sono utilizzato molto pesantemente sia Knex
e Bookshelf perché presta il -
ti dà l' capacità di avere un gruppo
di diverse chiamate asincrone e una sorta di unirsi poi insieme
o prendere qualcosa, e poi
con quella chiamata un'altra chiamata asincrona del database
e restituire tale valore e poi saltate alla prossima allora
e il prossimo poi e poi avere un prendere alla fine per ordinare
di mimica try asincrona cattura comportamento con il codice asincrono,
perché si sta vedendo ora
ma è ancora più difficile una volta si inizia a trattare con esso.
Codice asincrono è proprio ovunque
in JavaScript lato server e davvero una misura molto maggiore
quanto siete abituati a se hai fatto Javascript
sul lato client.
In modo che davvero, davvero ti ha aiutato là fuori.
Ma solo per mostrarvi l'istruzione debugger
che stavo parlando in gli strumenti ispettore nodo,
Ho intenzione di andare avanti e lanciare una linea debugger qui
nella funzione renderCourses e vedere dove mi porta
quando - così nodo ispettore può essere installato
facendo NPM Install con una bandiera G,
che significa globale Nodo ispettore.
E sarà recuperare per NMP e installarlo a livello globale
per le vostre applicazioni così puoi semplicemente chiamare
dalla riga di comando.
Ho già installato così io andrò avanti e -
in realtà potrebbe avere aspettare che sarà solo prendere,
prendere due secondi.
E cosa ispettore nodo ancora una volta si permette
da fare è avere questo senza testa versione della console debugger
che siete abituati a quando si lavora sul lato client ed essere in grado
per fermare, basta aggiungere specificato punti nel codice.
Interrompere l'esecuzione e prendere un guardare a ciò che sta succedendo,
che avrebbe realmente tornare utile se la funzione
così erano disponibili
quando il debug Codice PHP sono sicuro.
Così facciamo solo prendere uno sguardo a questo.
Quindi posso solo chiamare ispettore nodo
e dirà visitare questo URL la porta 5858 per avviare il debug,
questo è solo il default per come si avvia.
Così, ora ho - non c'è niente succedendo qui
perché ho bisogno per iniziare.
Così nodo impasse [fonetica] la bandiera debug e poi app.js.
Così si dice debugger in ascolto sulla porta 5858,
Ascolto Server Express su 3000.
Quindi siamo a posto.
Vorrei solo aggiornare questa.
E ora posso vedere i app.js codice che stavo solo guardando
ma qui nella console.
Così ora, se provo a eseguire questo, si può vedere, si ferma.
E 'solo in attesa perché la sua intera esecuzione di codice è ora
fermato su questo debugger riga che ho messo lì.
E posso ora del server -
[Inaudible Osservazione]
Oh, sì. Qual è la parola chiave scorciatoia per lo zoom dello schermo?
Oh, c'è.
Capito. OK.
[Pausa]
Oh, non sta cercando [Fonetica] che.
Così, i corsi è davvero grande
perché io non sto facendo un limitare clausola o nulla,
è solo il recupero della intero database dei corsi
che sono un sacco di loro.
E così - che è oggetto
che in realtà potrebbe bloccarsi l'istanza ispettore nota.
E'- OK.
Lasciatemi fare un limite e allora possiamo dare uno sguardo
quando non è il recupero centinaia di corsi.
Così, uccidere il server e ispettore
e farò corso Limite query di raccolta 20.
Così, in Bookshelf, a differenza Laravel
dove si può chiamare limitare direttamente o chiamare qualsiasi
di questi metodi SQL utilizzare
per direttamente sulla istanza ORM.
Sempre che si sta utilizzando solo Metodo SQL che è fornito
in Knex, dovete chiamare la query per ordinare
di attingere catena query.
E questo può essere invocata sia con una funzione,
così si può dire, la funzione questo limite di 10 o si chiama
specificando che Metodo vuoi chiamare
sull'istanza Knex e poi quale valore.
Quindi stiamo andando a fare limitare 20 e quindi impostare.
Noi in realtà non lo facciamo bisogno debugger qui
perché possiamo solo impostare punti di interruzione
e che rende più facile.
Bene.
Quindi, cerchiamo di impostare un punto di interruzione proprio qui e provare a caricarlo.
Linea sbagliata.
Proprio qui.
[Pausa]
OK. Così si è fermato di nuovo.
Così ora, i corsi è un oggetto con lunghezza di 20
e possiamo vedere tutti i diversi modelli che i propri inverosimile
dal database qui così ho preso un oggetto del modello
che ha, all'interno attributi di proprietà
in oggetto sono tutte le cose che è trovato nel database.
Tutti gli eventi che hanno stata registrata
quindi è possibile registrarsi diversi eventi,
per esempio quando l' modello è stato cancellato
o quando è di essere recuperata,
è possibile impostare diversi proprietà o modificare le cose.
Ci sono un sacco di diversi ganci e questi sono documentati
nelle Bookshelf.js documentazione che consentono
per fare una sorta di nulla che si vuole veramente fare
con i vostri modelli e le collezioni.
È possibile - si è inteso per essere veramente personalizzabile
e davvero facile per di adattare i loro
alle esigenze della vostra applicazione.
Ma solo guardando attraverso qui,
Posso vedere cosa diversa corsi sono disponibili.
E in questo caso, in realtà non recuperare
con altri dati diversi da quelli appena i corsi stessi.
Ma, in modo simile a Eloquente l'ORM è possibile impostare
le relazioni, così il corso appartiene a molti istruttore.
Quindi, se vado avanti e arrestare l'applicazione,
salta al presente recuperare chiamata, possibile specificare diverse opzioni
che vuoi passare insieme ad esso.
E uno di questi è possibilità di caricare codice correlato
specificando withRelated istruttori allora i corsi.
Così torniamo indietro e fresco questo qui e fermarsi di nuovo.
Così ora, l'oggetto dei corsi, stesso numero di modelli,
ma ora ogni modello ha un hash relazioni
che ha gli istruttori che è correlato a.
Quindi questo corso per esempio
che è ovviamente 082 ha due Modelli istruttore correlati.
E si può già vedere come questo è molto più facile per ordinare
di lavorare visivamente con oltre quando hai a che fare con roba
che tipo di modifica il codice e poi provare di nuovo in PHP.
Il fatto che si può solo interrompere l'esecuzione del tutto
e valutare ciò che è qui e la - nella console, il -
zoom out, corsi è, si sa,
ciò che l'ambito locale variabili sono disponibili
e questo è attualmente il globale oggetto perché, come hai visto,
a meno che non si chiama con un contesto specifico, non sta andando
per avere qualcosa di rilevante qui.
E poi, la - mi permetta mostra alcuni esempi
attuazione promesse.
Così, invece di fare questo istruttori withRelated qui sto
intenzione di andare avanti e spostare questo a prendere e poi i corsi,
Ho intenzione di tornare istruttori courses.load.
E poi - poi si chiama allora.
[Pausa]
Allora a questo punto, la corsi dovrebbero essere caricati
con gli istruttori, che è azione asincrona.
Ma perché stiamo restituendolo da una promessa, il valore successivo
perché allora è tutto ciò che questa chiamata restituisce asincroni
che in questo caso di carico è un metodo in Bookshelf
che restituisce effettivamente la collezione stessa.
Così sta caricando il istruttori in là
e poi è possibile specificare - se è solo una proprietà,
è possibile specificare questo come stringa, altrimenti,
si può fare istruttori e requisiti
come metodo - mi dispiace, come un array.
E poi se vuoi ottenere veramente elegante e vincolare qualsiasi
di questi dato fetch, si è possibile specificare come un hash
con istruttori e poi quello ti piace per limitare la query.
Così, mi piacerebbe caricare tutti istruttori di corsi in cui -
così QB per query builder dove è attivo lo stato.
E si può ottenere davvero fantasia con qualsiasi
delle relative domande vuoi costruire.
Ma, solo per ora, stiamo andando attenersi a soli istruttori
e stiamo restituendo il valore
così poi la prossima poi dovrebbe hanno tutti i corsi di caricamento
correttamente.
E se c'è stato un errore in ogni passo in questa catena,
sarebbe saltare giù al pescato.
Quindi cerchiamo di andare avanti ed eseguire quello.
Così ogni volta - a differenza di PHP, uno svantaggio è il
"Perché il nodo" è una lunga corsa processo, è effettivamente bisogno
per arrestare il processo nodo come si aggiorna il codice,
perché la versione che è esecuzione in fase di esecuzione è,
la versione del il codice che è stato caricato
quando non è iniziato quello che hai ordinamento
del aggiornato il codice con da allora.
OK. Ci mettemmo un punto di interruzione qui, qui e aggiornamento.
[Pausa]
Oh, io in realtà non ho aggiornare questa pagina sia
quindi era sul vecchio processo.
Quindi si aggiorna sia questo e l'ispettore nodo.
Così ora vediamo i corsi.
Se dobbiamo solo prendere esempio di uno di questi modelli,
possiamo vedere che le relazioni oggetto è vuoto, ma ora -
e la ragione per cui avete bisogno impostare punti di interruzione è, beh,
Ho detto che si può saltare in stack trace
e vedere si sa, dove sta andando in app.
Così ora posso vedere cosa c'è accade nel metodo di carico,
che ho definito sulle collezioni.
E 'sorta di "carichi Eager rapporti si collega a un già ".
E si può scorrere e vedere riga per riga
dove questa roba è va che è fantastico.
Se avete qualcosa che è rotto nel codice,
sta lanciando qualche errore e siete come, voglio davvero
per vedere dove questo sta andando.
Ma non appena si esegue in qualcosa di asincrono, il -
si passa al successivo spuntare del ciclo di eventi
e perderai il tuo - si perde il posto
nella finestra di ispezione nodo.
Quindi è necessario dire, "OK, una volta che perdo questo,
è necessario fermarsi ora a nuovo questa linea. "
Perche 'se ho continuato a colpire giù, giù lo stack,
avrebbe alla fine solo andato via non avevo impostare questo
linea 22 blu linea di interruzione.
Così ora, se guardo a corsi qui,
dovrebbe sulla relazione istruttori
e quindi la istruttori li attaccano.
Così, si può vedere che sono tornato una promessa dalla prima promessa
e allora si può continuamente fare tutta la linea.
Così il diverso promessa, promettere biblioteche,
Ho usato uno chiamato Bluebird che è veramente utile.
Si aggiunge un sacco di bella di questo per cambiare asincrono -
cambiando call back codice di base in materia
che funziona bene con le promesse.
Ma - scusate [incomprensibile] cosa Stavo per dirlo lì.
Diamo uno sguardo se al -
quindi diciamo che c'è stato un problema quando va a prendere qualcosa.
Così ho questo altro percorso per trovare chiamato ID corso.
Allora, facciamo corso 2.
Posso ottenere - Corso JSON.
E questo fa [incomprensibile].
[Pausa]
Sento odore di qualcosa che non va qui.
Non su 3000, ero in la scheda ispettore Chrome.
OK. Quindi cerchiamo di andare a Corso - Corso JSON 1.
E questo torna giusto in JSON formato, il corso caricata
con alcuni istruttori.
Ma l'esempio che volevo invia ecco che,
Sto facendo JSON ID corso.
E nei parametri fetch, Sto specificando richiedono vero,
che è una opzione che è documentata in Bookshelf
dove sta dicendo che: "Se, Cerco e trovo questo corso
e non è lì, poi gettare un errore. "
E che dovrebbe essere colto da il fermo bloccare qui.
Quindi cerchiamo di andare avanti e salto indietro nella finestra di ispezione nodo e provare
e rompere questo e Vediamo quello che abbiamo ottenuto.
Quindi cerchiamo di impostare una pausa qui sul corso JSON.
Bene.
Andrò a corso JSON e Vorrei solo mettere in qualche -
[Pausa]
Può essere un po 'difficile a volte quando si sta cercando
gestire quale è stato aggiornato
e che non hanno - e vediamo.
Così è chiamata errore risposta vuota.
[Pausa]
Buttiamo un debugger qui.
A causa di come nodo in realtà ottimizza
per il runtime JavaScript di essere così veloce sul server,
a volte il debugger nodo ha alcuni errori quando si tenta
e impostare punti di interruzione dinamicamente e che effettivamente ha bisogno
di utilizzare un debugger e non la linea per linea.
Così vediamo se questo ci ottiene quello che vogliamo.
Così mi sono messo, app.get id corso json,
e ho impostato il mio debugger lì
nella dichiarazione di cattura nella parte inferiore.
Fetch richiedono vero, dovrebbe - tutto bene, ce ne andiamo, rotto.
Così, adesso posso vedere che ha interrotto
in questo blocco catch finale perché il withRelated -
o perché il bisogno di vero specificata e non c'è nessun corso
con ID di questo grande numero attraverso un'eccezione
che ora è eMessage.
E ogni errore in JavaScript ha una proprietà di stack
che viene con esso.
Quindi è spesso utile Per esempio,
consolare uscire e.stack.
E posso effettivamente vedere quando ho colpito un errore.
Così ottengo l'errore vuoto risposta, questo è il messaggio
che è stato inviato via Bookshelf.
Ma ora, posso dare un'occhiata al, a richiesta dello stack e vedere
che in Bookshelf modello dialetti SQL 83,
questa risposta vuota è stato gettato errore.
E questo è dove ho accennato, è dot anonimo
perché è un anonimo funzione.
Se fosse una funzione nome avreste idee migliori
alla quale funzionare effettivamente attraverso senza dover andare
nel codice model.js.
Anche se è destinata ad essere abbastanza, abbastanza leggibile,
così posso vedere che online.
Cosa dicono me era la linea 83.
Quindi, se options.require e la risposta non esisteva,
ora lancia una nuova Risposta del vuoto.
Così si può vedere abbastanza semplice come funziona.
Ed internamente in Bookshelf,
ci sei solo un intero mazzo di utilizzo di promesse.
Quindi, è possibile specificare Promise.method
con la biblioteca Bluebird che mantiene il contesto corretto
questo mentre il ritorno una promessa.
E così ho - sto vincolante il valore di questo simile
a quello che avevo detto in precedenza, ma con promesse
e poi posso - è nuovo.
Può essere asincrona o se non voglio.
E poi faccio un po ' altre cose che possono
o non possono essere asincrona e poi una serie di salti giù questo.
Quindi Promise.all è un supporto che un sacco di biblioteche popolari hanno
dove si può avere un array di potenzialmente può
o non può essere promesse.
E una volta tutti coloro che sono completata, si torna che
e poi salta alla riga successiva
e si può vedere come realmente appiattisce la piramide
che si ottiene, il l'inferno callback come il suo noto
se si sta facendo tutto con richiami riga per riga.
Ci sono modi per aggirare questo, ma le promesse sono uno
dei modi migliori a mio parere
per mantenere realmente il codice pulito e di facile lettura.
Così che è solo una breve introduzione a JavaScript
e Bookshelf e Knex in generale.
E, se ci sono delle domande, So che è una tonnellata di materiale
a una sorta di cercare di copertura soprattutto perché le lingue,
differenza della maggior parte che si è familiarità con così volevo solo
fare in modo che almeno se si hanno problemi
con il codice, è può sorta di saltare -
questo è quello che mi piace fare, è sorta di saltare nelle librerie
che sto usando e vedere come le cose sono strutturati.
Ce n'è uno che avevo citato in precedenza chiamato Backbone.js
e in realtà è [Incomprensibile] sul lato client
per contribuire a dare vista del modello struttura di regolazione
al codice.
Ma in realtà ha fonte di documentazione annotata
che permette una sorta di vedere.
E 'davvero bene documentato, cosa sta succedendo,
come sta aumentando la funzionalità Ajax
o la funzionalità o evento I modelli e le collezioni di specie
di spiegare che cosa è in corso nel processo.
E se si capisce le basi di JavaScript
come l'ereditarietà prototipale e quanto funzioni utilizzate
sia come oggetti e valori e le classi e tutto.
Lo rende molto più facile per capire cosa sta succedendo
sulla potenzialmente nella librerie che si sta utilizzando
e debugger di codice ed essere in grado per non essere sbattere la testa
contro il muro perché non si capisce come il
diversi pezzi stanno lavorando, così.