>> Так, з цим, як говориться,
тільки вид простий введення в прототипах
і модель JavaScript об'єкт.
Ми не збираємося перекладати шестерні трохи поговорити
про більш JavaScript на сервер і Книжкова полиця Бібліотека
і з'єднання Knex Бібліотека.
Таким чином, ви можете насправді просто -
якщо ви шукаєте Bookshelf.js це має бути досить легко
знайти, має бути першим результат, і Книжкова полиця
Давид згадується тільки дає багато структури
навколо об'єктів JavaScript і працювати з ними реляційно
в реляційних базах даних.
Так, багато схожих рис хто насправді сильно натхненний
по ORM Laravel в якості а також Backbone.js,
який є передня частина MVC бібліотека, яка дозволяє вам
структурувати ваш код, подібно до того, що я показував
з прикладами прототипи, де ви можете -
а не просто довільно кидати заняття
з ваших думок тут і там.
Це дає вам моделі і збірники цих моделей
які, як передбачається, в якості роду єдина точка істини
про даними за вашу програму.
І тоді ви слухати, як ті, Моделі зміни, ви говорите, в порядку,
знову винести цей шаблон тут і на цей раз тут
а не просто додати клас тут, додати клас там і свого роду підібрати
на селектор і зробити Павутина JQuery коду.
Це дає більше на основі класів Структура для окремих частин,
але важливим компонентом що бібліотека моделі
які мають схожу структуру до того, що моделі на полицю зробити.
Так що, якщо ви знайомі з Книжкова полиця ви досить також
досить добре знайомі з Backbone.js моделі,
і я рекомендую поглянути на це.
Так, деякі з основних особливостей
що це дає вам всього лише можливість установки даних на об'єкті
подзвонити запитом, що повертає окремий запис
з бази даних, створити відносини як подібні
те, що ви мали справу в в Laravel
де ви можете сказати Пацієнт встановити метод запису
і сказати, що це виграв рекорд
де об'єкт запис ім'я таблиці показники здоров'я.
Давайте подивимося.
Має багато - вона належить -
просто речі, які ви дуже схожі -
досить добре знайомі з вже, але в JavaScript.
І під капотом, для книжкової полиці,
він використовує будівник запитів називається Knex.js.
Отже, ось Knex, knexjs.org.
Це посилання на іграшки, якщо хто-небудь коли-небудь грав з цим.
Але це дозволяє - в Аналогічним чином, в JQuery,
Ви тільки вид створення ланцюг різних методів
що ви телефонуєте на вашому запис у базі даних, так що ви можете -
Ви почали з того, Knex та ім'я таблиці.
Так, наприклад, користувачі Knex, вибрати, які стовпці потрібно,
де, і мають різні WHERE умовні і ви можете мати
І де, або там, де, де між ними, де немає,
Ви зараз, по лінії.
Ви можете вказати різні приєднується між таблиць бази даних
які Книжкова полиця використовує внутрішньо створити свого роду магії
навколо hasOne, HasMany, належить до, belongsToMany.
І тому комбінація
з двох дозволити вам зробити досить ступеня, що ви б використовувати
в рамках як Laravel з точки
функціональності роботи з базами даних.
Отже, давайте йти вперед і приймати подивіться на простому прикладі
для експрес додаток, який робить використання цих моделей
та збірники Книжкова полиця джаз [фонетичні].
Так, я створив просто просте додаток тут.
Я роздягнена деякі речі , Який був ініціалізації експрес
і рухатися, що в ініціалізації каталог, який я створив.
Одна з хороших речей про роботи з Експрес як передбачалося
щоб Laravel те, що є дійсно не дуже в життя
на вас стилізоване.
Таким чином, ви можете створювати каталоги -
це дійсно не дає вам багато, щоб відпрацьовувати.
У вас є тільки вигляд деяких основні параметри, а потім -
але це не хвилює , Де вони знаходяться.
Ви не повинні мати Каталог контролера.
Вам не потрібно, щоб мати моделі каталог, каталог конфігурації.
Ви можете сортувати, створити ті, як ваші потреби проекту
і встановити речі шлях що сенс найбільш важливі для вас.
Так замість того, всі це експрес шаблонний
в основних app.js я тільки що сказав додаток одно вимагають ініціалізації / Експрес.
І так в ініціалізації,
ініціалізації папка Я просто Експрес тут,
і це вимагає Express, дзвінки функція установки, називає -
налаштовує вид двигуна, JSON парсер, все таке.
Так що тепер, давайте і далі йти.
Так що я вимагають Звичайно інструктор зустріч
і вимоги моделей.
Так що це в папці, Я просто вирішив моделей імен.
Це не обов'язково має бути спосіб, однак, це має сенс,
але моделі просто досить загальний тому я рекомендував би його.
Але - Так підемо для курсу.
Я думаю, що я використовую - Так, і приклади
тут все засновані навколо моделі курсу.
Так що давайте просто взяти подивіться на це.
Отже, тепер, тільки з Перший рядок цієї моделі,
Я вже вимагає щось ще.
Так що якщо ви помітите у вузлі Ви повинні бути вимагають
або ви збираєтеся в кінцевому підсумку вимагаючи цілий букет
з різних файлів , Які розташовані
в різних місцях у вашому додатку.
І відносні шляхи туди, де ви знаходитесь
в поточному додатку,
якщо це не верхній рівень вже визначається, як в установці його
з MPM як книжковій полиці або Knex або експрес або щось,
ті не родич.
Так? Збільшення більше?
ОК. ОК. Таким чином, ви будете зрештою вимагає цілий букет
просто різні файли в Код, який добре і що погано.
У хорошому сенсі, ви знаєте, де речі, і це не свого роду
магії, як до того, що відбувається під капотом,
які можуть реально призвести до плутанини
коли у вас є дуже важкі Java -
або дуже важкий рамки, як Laravel, який вид каже,
ми збираємося, щоб піклуватися це так у вас немає
вимагати все але у вас є
знати, як все працює для того, щоб використовувати його.
Де, як в даному випадку, це дуже просто, як в
де всі, вони просто кінці
тим, що трохи більше друкувати.
Так само, як осторонь мені подобається у використанні, є плагін
якщо ви використовуєте сліпий текст
де ви можете встановлювати вузол Модулі допоміжні і ви можете почати
ввести як інструктор і він створює відносний шлях
, Де ви знаходитесь в тому, що Код файл, начебто корисно.
Отже, модель звичайно вимагає, тут базу
а потім база стажер потрібно ініціалізації / книжкову полицю
а потім Книжкова полиця, він вимагає верхнього рівня Книжкова полиця
а потім ініціалізує його ініціалізації примірника Knex,
який задає ім'я клієнта
і зв'язок настройки для бази даних.
Так що я просто за допомогою простої Примірник Сиквел Pro, який -
з MySQL, я до нього доступ з Сиквел Pro і вона ж має вид
аналогічного базі Установка, як ми мали
у першому прикладі додатки з каталогом курсів.
Так, я можу встановити з'єднання налаштування тут,
і всі вони описані на сторінці проекту Knex.js
про те, як встановити ці зв'язки.
Так, у мене тепер є свій базову модель.
І як я вже говорив з зміна прототип,
так що може насправді бути навіть багато, щоб -
додає багато шаблонного в код так конвенція
що була адаптована по Backbone.js
і тепер Bookshelf.js є щоб додати це розширити метод
як статичне властивість Ваші об'єкти JavaScript,
що надає йому вид майже клас на основі характеру успадкування
де, якщо ви телефонуєте розширити ви можете налаштувати будь
із способів-прототипів що ви хотіли б тут
а потім ви можете - будь-яка додаткові статичні методи
що ви, можливо, захочете, ви можете просто встановити їх самі
тут, тому я можу продовжити його с - це, якщо, наприклад,
кілька моделей необхідно показати ім'я і цей отримати ім'я.
Отже, ось, я кажу, коротке ім'я для моделі
за замовчуванням є те, що його ім'я Готель знаходиться в іншому випадку повернення
немає назви.
І тепер на кожен модель, яка представляє собою -
що розширює цю базову модель, я тепер є метод коротке ім'я
на прототипі ланцюг десь.
І якщо я хочу, щоб перезаписати його Я можу просто встановити його - встановити, що -
GetName б тут.
І це дозволяє імітувати класична спадщина
в JavaScript, яка може бути приємно зокрема для речей
, Які піддаються бути Клас заснований як об'єктних моделей.
Так що давайте перейти назад в код програми.
Так що я отримав маршрут для всього слеш, тільки для мого індексу
а потім скоротити курси.
І обидва ці закликають метод renderCourses.
Отже, ще раз, функції перший клас, і можуть бути передані
як аргументи методів.
Так, цього app.get, Я дзвоню -
Я передаю renderCourses як аргумент.
І зробити - або функції може бути настроєний як вар -
як я робив раніше вар renderCourses дорівнює функцію
або вони можуть бути просто Функція renderCourses.
Це не робить занадто особливої ​​різниці.
Ви дійсно можете їсти те, що називаються функції ім'я
вирази, які VAR renderCourses одно
Функція renderCourses.
І, причина хочете мати назвати функції особливо
у вузлі тому, що він дає вам чистіше -
більш зручним для читання трасування стека.
Так що якщо у вас є цілий букет
анонімних функцій він говоритиме -
коли у вас є помилки в коді You'Ll -
ви не будете знати, яка функція це дзвонить вам доведеться шукати
на номер коду і номер рядка
і це іноді легше просто візуально розібрати
коли ви насправді мають імена
для функцій самі на стороні сервера.
Так що це renderCourses, давайте назвемо вузлів додатків -
так я слухаю на Ядро 3000 [фонетичні].
І так все це робить правильно тут просто стає все
курси з бази даних.
Я навіть не обмежуючи його так він робить величезну кількість
рядків він повертає.
І для того, щоб зробити це,
від моделі, звичайно, є є статичне властивість
називається колекція.
І тому я просто назвати його - я сказав створити нову колекцію
для цього курсу, а потім завантажити його,
, А потім повернутися курси Колекція тут, в обітниці.
Так внутрішньо, Девід в - Остання половина вчив трохи
про обіцянки і обіцянки є використовується дуже сильно і в Knex
і Книжкова полиця тому це надає -
Це дає вам Здатність мати купу
з різних асинхронні виклики і як би приєднатися, то разом
або принести щось, а потім
з викликом іншого асинхронний виклик бази даних
і повернути цю цінність і потім перейти до наступного, то
а в наступному, то і тоді доведеться зловити в самому кінці, щоб розібратися
мімічних асинхронний спроба зловити поведінку з асинхронного коду,
тому що ви бачите його зараз
але це ще складніше, як тільки ви починаєте мати справу з ним.
Асинхронний код просто скрізь
в стороні сервера JavaScript і дійсно в набагато більшому ступені
ніж ви звикли до того, якщо ви зробили наявність
на клієнтській стороні.
Так що дійсно, дійсно допоміг вам там.
Але тільки, щоб показати вам, відладчик заяву
що я говорив у інспектор інструменти вузол,
Я збираюся йти вперед і кинути відладчика лінію тут
у функції renderCourses і подивитися, де, що приводить мене
коли я - так вузла інспектор може бути встановлений
роблячи НПМ Встановити з прапором G,
що означає Global Вузол інспектор.
І це принесу його для NMP і встановити його глобально
для ваших програм так що ви можете просто назвати його
з командного рядка.
Я вже встановлені так, щоб я піду вперед і -
насправді це, можливо, доведеться чекати його просто візьму,
займе пару секунд.
І те, що вузол інспектор знову дозволяє вам
зробити, це мати цей обезголовлений версія консолі відладчика
що ви звикли до при роботі на стороні клієнта і вміти
, Щоб зупинити, просто додайте вказано вказує в коді.
Зупинити виконання і приймати подивитися на те, що відбувається,
які б дійсно нагоді, якщо функція
так були доступні
при налагодженні PHP код, я впевнений.
Так що давайте просто взяти подивіться на це.
Так що я можу просто зателефонувати інспектор вузол
і це скажу відвідати цей URL порт 5858, щоб почати налагодження,
от тільки за замовчуванням за те, як вона запускається.
Так що, я тепер отримали - є нічого не відбувається тут
тому що мені потрібно, щоб почати.
Так вузол тупик [фонетичні] прапор налагодження, а потім app.js.
Так він говорить відладчик прослуховує порт 5858,
Експрес слухає сервер на 3000.
Так що ми добре йти.
Дозвольте мені просто оновіть це.
А тепер я бачу app.js код, який я просто дивлюся на
але тут, в консолі.
Так що тепер, якщо я намагаюся запустити це, Ви можете бачити це, він зупиняється.
Це тільки і чекають, тому що його Весь виконання коду тепер
зупинився на цьому відладчик лінія, яку я поклав там.
І я тепер можу сервер -
[Нерозбірливість Зауваження]
О, так. Що таке ключове слово ярлик для збільшення екрану?
О, є.
Зрозумів. ОК.
[Пауза]
О, це не дивиться [Фонетичні], що.
Так, курси дійсно великий
тому що я не роблю обмежити пункт або що-небудь,
це просто вибірка Вся база даних курсів
які багато хто з них.
А так - що об'єкт
що насправді може привести до збою екземпляр інспектор записка.
It's - ОК.
Дозвольте мені зробити межа і то ми можемо поглянути
коли він не витяг сотні курсів.
Так, вбити сервер та інспектор
і я зроблю Course межа колекція запит 20.
Так, в книжковій полиці, на відміну від Laravel
де ви можете просто подзвонити обмежити безпосередньо або будь-яким
з цих методів SQL що ви використовуєте
безпосередньо на примірнику ORM.
У будь-який час, що ви використовуєте тільки Спосіб SQL, який передбачений
в Knex, ви повинні викликати запит для сортування
з підключитися до ланцюга запиту.
І це може бути викликано або з функцією,
тому можна сказати,, функції ця межа 10 або ви це називаєте
, Вказавши, яка метод ви хотіли б подзвонити
на примірнику Knex а потім, яке значення.
Так що ми збираємося робити обмежити 20, а потім встановити.
Ми насправді не потрібно відладчик тут
тому що ми можемо просто встановити точки зупину
і що робить його легше.
Добре.
Отже, давайте встановити точку зупину прямо тут і спробувати завантажити його.
Неправильний лінії.
Прямо тут.
[Пауза]
ОК. Так що знову зупинився.
Так що тепер, курси є об'єкт з довжиною 20
і ми бачимо, всі різні моделі, що це за вуха
з бази даних прямо тут так у мене є об'єкт моделі
який має, всередині атрибути власності
по об'єкту всі речі що він знаходиться в базі даних.
Будь-які події, які мають було зареєстровано
так що ви можете зареєструватися різні заходи,
наприклад, коли модель знаходиться в процесі видалення
або коли вона бути вуха,
можна задати різні властивості або змінювати речі.
Там дуже багато різних гачків і всі вони описані
в Bookshelf.js документація, які дозволяють вам
зробити вигляд нічого що ви дійсно хочете зробити
зі своїми моделями і колекції.
Ви можете - вони призначені щоб бути дійсно настроюється
і просто для адаптувати їх
до потреб вашого Додаток.
Але тільки переглядаючи тут,
Я бачу, що різні курси доступні.
І в цьому випадку, я фактично не принести
з будь-якими іншими даними, крім всього самі курси.
Але в аналогічно Красномовний ОРЗ можна встановити
до відносин, тому курс належить багатьох інструктора.
Так що, якщо я йду вперед і зупинити додаток,
перейти до такої запит виклик, ви Можна вказати різні параметри
що ви хотіли б донести до нього.
І один з них є можливість завантаження відповідний код
, Вказавши withRelated інструктори потім курси.
Так давайте повернемося і свіжий це тут і зупинитися.
Так що тепер, об'єкт курси, така ж кількість моделей,
але тепер кожна модель має хеш відносин
який має інструкторів що це пов'язано с.
Так що це, звичайно, наприклад
який є, звичайно 082 має два пов'язані моделі інструктор.
І ви вже можете побачити, як набагато легше це для сортування
візуально працювати, ніж з коли ви маєте справу з речами
що ви як би змінити код а потім спробувати знову в PHP.
Той факт, що ви можете просто повністю зупинити виконання
й оцінювати те, що тут і - В консолі, -
зменшити масштаб, курси, ви знаєте,
що це локальна область змінні доступні
і це в даний час є глобальною Об'єкт, тому що, як ви бачили його,
якщо ви не телефонуйте з конкретного контексту, він не збирається
мати щось відповідну тут.
І потім, - нехай мені показати ще кілька прикладів
реалізації обіцянки.
Таким чином, замість того, щоб робити це withRelated інструктори тут я
збираюся йти вперед і рухатися в цьому щоб забрати, а потім курси,
Я збираюся повернутися courses.load інструктори.
А потім - потім ви називаєте то.
[Пауза]
Так то в цій точці, курси повинні бути завантажені
з інструкторами, які є асинхронним дію.
Але тому, що ми її повернення від обіцянки, таке значення
бо тоді це все, що цей асинхронні повертається викликів
який в цьому випадку навантаження є спосіб, в книжковій полиці
що насправді повертає сама колекція.
Так що це вантаження інструктори на там
а потім ви можете вказати - якщо це просто одна з властивостей,
ви можете вказати це у вигляді рядка, в іншому випадку,
Ви можете зробити інструкторів і вимоги
як метод - вибачте, у вигляді масиву.
А потім, якщо ви хочете, щоб отримати дійсно фантазія і обмежити будь
з них дали вибірок, ви можете вказати його як хеша
з інструкторами і що потім Ви хотіли б обмежити запит на.
Отже, я хотів би, щоб завантажити все інструктори на курсах, де -
так QB для будівник запитів де стан активно.
І ви можете отримати дійсно фантазії з будь-яким
з пов'язаних запитів Ви хотіли б побудувати.
Але, тільки на даний момент, ми збираємося дотримуватися всього інструкторів
і ми повертаємося, що значення
так то в наступному потім слід є всі курси завантажувалася
належним чином.
І якщо сталася помилка на будь-якому етапі цього ланцюга,
було б зістрибнути з уловом.
Так що давайте йти вперед і працювати, що.
Таким чином, кожен раз - на відміну від PHP, один недолік є
», Тому що вузол" є давно працює Процес, вам дійсно потрібно
, Щоб зупинити процес вузла як ви оновити свій код,
оскільки версія, що це працює в період виконання є,
версія Код, який був завантажений
коли почав не що у вас є свого роду
з оновили код з тих пір.
ОК. Ми встановимо точку зупину тут, тут і оновлення.
[Пауза]
О, я насправді не оновити цю сторінку або
так що це було на старому процесу.
Таким чином, ви оновити як це та інспектор вузол.
Так що тепер ми бачимо, курси.
Якщо ми просто взяти зразок однією з таких моделей,
ми бачимо, що відносини Об'єкт порожній, але тепер -
і причина того, що вам потрібно встановити точки зупину, ну,
Я згадав, що ви можете стрибати в трасуванні стека
і подивитися, ви знаєте, де він збирається в додаток.
Так що тепер я можу бачити те, що відбувається в методі навантаження,
які я визначив про колекції.
Він ніби як "Прагнучи навантаження відносини на вже ".
І ви можете покроково і подивитися, рядок за рядком
де цей матеріал збирається і це здорово.
Якщо у вас є щось що не працює в коді,
це кидає помилку і ви, як я дійсно хочу
щоб побачити, де це відбувається.
Але як тільки ви зіткнетеся з щось асинхронний, -
він іде до іншого відзначте з циклу подій
і ти втратиш свою - Ви втрачаєте своє місце
в інспекторові вузла.
Таким чином, ви повинні сказати, "Добре, тільки я втратити це,
він повинен зупинити зараз на цій лінії ще раз. "
Бо якщо я продовжував вражати вниз, вниз по стеку,
вона повинна була б зрештою просто пішов би я не встановити це
лінії 22 синю лінію розриву.
Так що тепер, якщо я дивлюся на курсах тут,
він повинен на ставлення інструктори
а потім інструктори прикріпити їх.
Таким чином, ви можете бачити, що я повернувся обіцянку від першої обіцянки
а потім ви можете постійно зробити це по лінії.
Таким чином, різні обіцянки, обіцяють бібліотеки,
Я використав один називається Bluebird який є дійсно корисним.
Це додає багато приємно це для зміни асинхронний -
зміни передзвонити базовий код в матеріал
що добре працює з обіцянками.
Але - шкода [нерозбірливо], що Я збирався сказати це там.
Давайте поглянемо хоча в -
так скажемо, що існує Проблема при вибірці щось.
Тому у мене є цей інший маршрут знайти під назвою курсу ID.
Так давайте зробимо курс 2.
Чи можу я отримати - JSON курс.
І це робить [нерозбірливо].
[Пауза]
Я відчуваю запах щось не так тут.
Відповіді 3000, я був на інспектор вкладка Chrome.
ОК. Так що давайте йти в Звичайно - JSON Звичайно 1.
І це повертає тільки в JSON Формат, звичайно завантажений
з деякими викладачами.
Але приклад я хотів дати тут є те, що,
Я роблю JSON курсу ID.
І у вибірку параметрів, Я і вказується, потрібно вірно,
який є варіант, який задокументовані в книжковій полиці
де він говорить, що: "Якщо, Я спробувати знайти цей курс
і це не там, потім видасть помилку ".
І це має бути спійманий улов блокувати сюди.
Так що давайте йти вперед і повернутися назад в інспекторові вузла і спробуйте
і зламати це і подивитися, що ми отримали.
Так давайте встановимо перерву тут, на процесі JSON.
Добре.
Я піду в JSON звичайно і Я б просто покласти в деяких -
[Пауза]
Це може бути трохи складніше іноді, коли ви намагаєтеся
управляти якою один був оновлений
і які мають не - подивимося.
Так що дзвонить помилку порожній відповідь.
[Пауза]
Давайте кинути відладчик тут.
Тому що, як вузол фактично оптимізує
для виконання JavaScript настільки швидко на сервері,
іноді вузол відладчик має деякі помилки при спробі
і встановити точки зупину динамічно і ви насправді потрібно
використовувати відладчик і НЕ лінія за лінією.
Отже, давайте подивимося, якщо це отримує нас, що ми хочемо.
Тому я, app.get JSON Звичайно ID,
і я встановив мій відладчик є
в заяві на вилов в нижній частині.
Fetch вимагають правда, треба - Все в порядку, там ми йдемо, зламався.
Отже, тепер я бачу, що він зупинився
в цьому останньому улові блоку бо withRelated -
або тому, що вимагають вірно визначені і немає звичайно
з ID цього великий число шляхом вилучення з
який в даний час Emessage.
І кожна помилка в JavaScript має властивість стека
, Який поставляється разом з ним.
Так досить часто буває корисно Для наприклад,
втішити вийти e.stack.
І я можу реально побачити коли я вдарив помилку.
Так що я отримую помилку порожній відповідь, що це повідомлення
який був відправлений через Книжкова полиця.
Але тепер, я можу поглянути в, при заході стека і побачити
, Що в книжковій полиці діалекти SQL модель 83,
це пусте відповідь Помилка була кинута.
І це те, де я згадувалося, це точка анонімно
тому що це анонімний функція.
Якби це було функцією назву вам доведеться кращі ідеї
до якої функціонують фактично через, не вдаючись до
в код model.js.
Хоча це призначається, щоб бути досить, досить читабельним,
так що я можу бачити, що в Інтернеті.
Що вони говорять мені було лінії 83.
Так що, якщо options.require і відповідь не існує,
тепер кидає новий порожня помилка відповідь.
Таким чином, ви можете бачити досить просто, як це працює.
І внутрішньо в книжковій полиці,
там просто в цілому купа використання обіцянок.
Таким чином, ви можете вказати Promise.method
з Bluebird бібліотеці який тримає правильний контекст
це при поверненні обіцянку.
І тому я - я зв'язування Значення цього аналогічний
до того, що я згадав раніше, але з використанням обіцянки
і тоді я можу - це нова.
Це може бути асинхронний чи ні, якщо я хочу.
А потім я зробити деякі інші речі, які можуть
бути чи не бути асинхронними і то види стрибків вниз це.
Так Promise.all є допоміжним, що багато популярних бібліотек мають
де ви можете мати масив потенційно може
бути чи не бути обіцянки.
І як тільки всі ті завершена, ви повернетеся, що
а потім він стрибає до наступного рядка
і ви можете побачити, як насправді вирівнюється піраміду
що ви отримаєте, зворотного виклику, чорт візьми, як його відомий
якщо ви робите все з зворотні виклики рядок за рядком.
Є способи, щоб обійти це, але обіцянки є одним
з кращих способів, на мій погляд
щоб дійсно підтримувати вашу код чистим і легким для читання.
Так що це всього в декількох хвилинах Введення в JavaScript
і Книжкова полиця і Knex в цілому.
І, якщо є які-небудь питання, Я знаю, що тонна матеріалу
до виду спробувати кришка тим більше, що на мовах,
на відміну від більшості, що ви знайомі з так що я просто хотів
зробити так, щоб принаймні якщо у вас виникли проблеми
з вашим кодом, ви може роду стрибок -
це те, що мені подобається робити, це роду стрибнути в бібліотеках
що я використовую і подивитися, як речі влаштовані.
Там одна, що я згадав раніше назвав Backbone.js
і насправді це [Нерозбірливості] на стороні клієнта
щоб допомогти дати вигляду моделі Структура управління
в код.
Але це насправді має анотований джерело документації
яка дозволяє сортувати, бачать.
Це дійсно добре документально, що відбувається,
як це збільшення функціональність Ajax
або функціональність подія або моделі та колекції роду
пояснити те, що відбувається в процесі.
І якщо ви розумієте, основи JavaScript
як прототипну спадкування і просто, як використовуються функції
як обох об'єктів і цінностей і класи, і все.
Це робить його набагато простіше щоб зрозуміти, що відбувається
на потенційно в бібліотеки, які ви використовуєте
і код відладчик і вміти щоб не бути битися головою
до стіни, тому що Ви не розумієте, як
різні частини працюють, так.