>> ასე, რომ მიმდინარეობს განაცხადა,
უბრალოდ სახის მარტივი შესავალი პროტოტიპები
და JavaScript ობიექტს მოდელი.
ჩვენ არ ვაპირებთ გადაეტანა ემზადება ცოტა გაიგო
უფრო JavaScript შესახებ სერვერზე და წიგნის თარო ბიბლიოთეკა
და კავშირი Knex ბიბლიოთეკა.
ასე რომ, შეგიძლიათ რეალურად მხოლოდ -
თუ თქვენ მოძებნოთ Bookshelf.js ეს უნდა იყოს საკმაოდ ადვილი
იპოვოს, უნდა იყოს პირველი შედეგი და წიგნის თარო
როგორც დავით აღნიშნული მხოლოდ იძლევა მრავალი სტრუქტურა
გარშემო JavaScript ობიექტები და მათთან მუშაობა relationally
რელატიური ბაზაში.
ასე რომ, ბევრი მსგავსი თვისებები ვინც რეალურად მძიმედ შთაგონებული
by Laravel მიერ ORM როგორც ისევე როგორც Backbone.js,
რომელიც არის წინა ბოლომდე MVC ბიბლიოთეკა, რომელიც საშუალებას გაძლევთ
სტრუქტურირებაზე თქვენი კოდი, მსგავსი რა მე გვიჩვენებს
ერთად მაგალითები პროტოტიპები, სადაც შეგიძლიათ -
ნაცვლად მხოლოდ თვითნებურად სროლა გაკვეთილები
თქვენი შეხედულებები აქ და იქ.
ეს გაძლევთ მოდელები და კოლექციების იმ მოდელები
რომლებიც უნდა იმოქმედოს, როგორც სახის ერთი წერტილი ჭეშმარიტების
შესახებ მონაცემები თქვენი განაცხადი.
და მაშინ მოუსმინოს, როგორც იმ მოდელები ცვლილებები, თქვენ ამბობთ, OK,
ხელახლა გაუწიოს ამ template აქ და ამ ერთი მეტი აქ
და არა მხოლოდ დაამატოთ კლასი აქ, რჩეულებში დონის და სახის აირჩიოთ
on სელექციონერები და მიიღოს ობობას of jQuery კოდი.
იგი იძლევა უფრო კლასი დაფუძნებული სტრუქტურის ინდივიდუალური ცალი,
მაგრამ მნიშვნელოვანი კომპონენტია რომ ბიბლიოთეკა მოდელები
რომელსაც აქვს მსგავსი სტრუქტურა რა წიგნის თარო მოდელები გააკეთოს.
ასე რომ, თუ თქვენ იცნობს წიგნის თარო თქვენ საკმაოდ ასევე
საკმაოდ იცნობს Backbone.js მოდელები,
და მე გირჩევთ აღების შევხედოთ ამ.
ასე რომ, ზოგიერთი ძირითადი მახასიათებლები
რომ ეს გაძლევთ მხოლოდ უნარი მითითებული მონაცემები ობიექტი
მოვუწოდებთ მისაღებად, რომელიც ბრუნდება ინდივიდუალური ჩანაწერი
მონაცემთა ბაზაში, შექმნა ურთიერთობების მსგავსი
თუ რას ეხებოდა ფარგლებში Laravel
სადაც თქვენ შეიძლება ითქვას, პაციენტის მითითებული ჩანაწერის მეთოდი
და ამბობენ, რომ ეს მოიგო ჩანაწერი
სადაც ჩანაწერი ობიექტი ცხრილის სახელი ჯანმრთელობის ჩანაწერი.
ვნახოთ.
ბევრი - ეს ეკუთვნის -
უბრალოდ პერსონალი, რომ თქვენ საკმაოდ მსგავსი -
საკმაოდ იცნობს უკვე, მაგრამ JavaScript.
და ქვეშ Hood, განთავსების წიგნის თარო,
იგი იყენებს შეკითხვაზე მშენებელი ე.წ. Knex.js.
ასე რომ, Knex, knexjs.org.
ეს მინიშნება toy თუ ვინმეს ოდესმე ითამაშა ამ.
მაგრამ ეს გაძლევთ საშუალებას - ში მსგავსი მოდის, რომ jQuery,
უბრალოდ სახის შექმნა ჯაჭვის სხვადასხვა მეთოდები
რომ თქვენ მოუწოდებენ თქვენს მონაცემთა ბაზის ზედიზედ, ასე რომ თქვენ შეიძლება -
თქვენ დაიწყო იმით, Knex და ცხრილის სახელი.
ასე, მაგალითად, Knex წევრებს, აირჩიეთ რომელიც სვეტების გსურთ,
სადაც, და სხვადასხვა, სადაც პირობით და თქვენ შეგიძლიათ
და სად, ან, სადაც შორის, სადაც არ არის,
თქვენ ახლა ქვემოთ ხაზი.
თქვენ შეგიძლიათ მიუთითოთ სხვადასხვა უერთდება შორის თქვენი მონაცემთა ბაზის ცხრილები
რომელიც წიგნის თარო იყენებს იძულებით შეიქმნა ერთგვარი ჯადოსნური
გარშემო hasOne, hasMany, belongsTo, belongsToMany.
და ასე კომბინაცია
ორ მოგცემთ გავაკეთოთ საკმაოდ ბევრი რა ნეტავ იყოს გამოყენებული
ამ ფარგლებში, როგორიცაა Laravel თვალსაზრისით
ფუნქციონალური მუშაობის ბაზაში.
ასე რომ, მოდით წავიდეთ წინ და მიიღოს შევხედოთ უბრალო მაგალითი
განთავსების Express ოთახი, რომელიც იყენებს ამ მოდელების
და კოლექციები წიგნის თარო jazz [ფონეტიკური].
ასე რომ, მე შეიქმნა მხოლოდ მარტივი პროგრამა აქ.
მე stripped out ზოგიერთი პერსონალი რომ ინიციალიზაციისას express
და გადაადგილება რომ შევიდა init დირექტორია რომელიც მე შეიქმნა.
ერთი ლამაზი რამ მუშაობის Express როგორც ვარაუდობენ
to Laravel არის, რომ იქ ნამდვილად არ გაცილებით ამოქმედდეს
თქვენ conventionalized.
ასე, რომ თქვენ შეგიძლიათ შექმნათ დირექტორიები -
ეს ნამდვილად არ მოგცემთ მთელი ბევრი მუშაობა გამორთვა.
თქვენ მოხვდით უბრალოდ სახის ზოგიერთი ძირითადი პარამეტრები და შემდეგ -
მაგრამ ეს არ აინტერესებს სადაც თქვენ დააყენა მათ.
თქვენ არ უნდა ჰქონდეს კონტროლერი ს დირექტორია.
თქვენ არ უნდა მოდელები დირექტორია, config დირექტორიაში.
შეგიძლიათ სახის შექმნა იმ როგორც თქვენი პროექტის საჭიროებების
და მითითებული რამ up გზა რომ აზრი საუკეთესო თქვენ.
ასე რომ ნაცვლად, რომ ყველა ამ express boilerplate
მთავარი app.js უბრალოდ განაცხადა, app შეადგენს მოითხოვს init / ექსპრესი.
და ასე init,
ინიციალიზებისას საქაღალდეში მე უბრალოდ არ გამოხატავენ აქ,
და ეს მოითხოვს Express, ზარების ჩადგმის ფუნქცია, მოუწოდებს -
ადგენს კალენდარი ძრავა, JSON parser, ყველა რომ.
ახლა, მოდით გავაგრძელოთ ქვემოთ.
ასე რომ, მე მოითხოვს რა თქმა უნდა, ინსტრუქტორი შეხვედრა
და მოთხოვნები მოდელები.
ასე რომ ეს არის საქაღალდეში, რომ მე უბრალოდ გადაწყვიტა სახელი მოდელები.
ეს არ უნდა იყოს, რომ გზა თუმცა ეს აზრი,
მაგრამ მოდელები უბრალოდ ლამაზი საერთო ასე რომ მე გირჩევთ ეს.
მაგრამ - მოდით წავიდეთ კურსი.
მე ვფიქრობ, მე გამოყენებით - ჰო, და მაგალითები
ქვემოთ აქ ყველა საფუძველზე გარშემო რა თქმა უნდა, მოდელი.
მოდით უბრალოდ მიიღოს შევხედოთ, რომ.
ასე რომ, ახლა, მხოლოდ იმ პირველი ხაზი ამ მოდელს,
მე უკვე მოითხოვს რაღაც.
ასე რომ, თუ თქვენ შეამჩნევთ, ამ კვანძის თქვენ უნდა მოითხოვს
ან თქვენ აპირებს დასრულდება მდე მოითხოვს მთელი bunch
სხვადასხვა ფაილები რომელიც განლაგებულია
სხვადასხვა ადგილებში თქვენი განაცხადი.
და ნათესავი ბილიკები, რომ სადაც არ უნდა იყოთ
თქვენი მიმდინარე განაცხადი,
თუ იგი არ არის მაღალი დონის უკვე განისაზღვრება, როგორც თქვენ დააინსტალირეთ
ერთად MPM მოსწონს წიგნის თარო ან Knex ან Express ან რამე,
ეს ის არ არის ნათესავი.
დიახ? მიუახლოვდით მეტი?
OK. OK. ასე რომ, თქვენ აპირებს დასრულდება მოითხოვს მთელი bunch
მხოლოდ სხვადასხვა ფაილები კოდი, რომელიც არის კარგი და ცუდი.
კარგი გზა თქვენ იცით, სადაც რამ და ეს არ არის ერთგვარი
მაგია, რა არის მიმდინარეობს ქვეშ Hood,
რომელიც შეიძლება მართლაც იყოს დამაბნეველი
როდესაც თქვენ გაქვთ ძალიან მძიმე Java -
ან ძალიან მძიმე ფარგლებში, როგორიცაა Laravel, რომელიც ერთგვარი ამბობს,
ჩვენ ვაპირებთ იზრუნოს ამ, ასე რომ თქვენ არ გაქვთ
მოითხოვოს ყველაფერი მაგრამ თქვენ უნდა
იცოდეს, როგორ ყველაფერი მუშაობს, რათა გამოიყენოს იგი.
სადაც, როგორც ამ შემთხვევაში, ეს ძალიან მარტივია, როგორც
სადაც ყველაფერი, ისინი უბრალოდ მთავრდება
მდე ცოტა მეტი აკრეფით.
ისევე, როგორც მხარე მომწონს გამოყენება, არსებობს plugin
თუ თქვენ იყენებთ ბრმა ტექსტი
სადაც შეგიძლიათ instal კვანძის მოდულები დამხმარე და თქვენ შეგიძლიათ დაიწყოთ
აკრიფოთ როგორიცაა ინსტრუქტორი და ეს ქმნის ნათესავი გზა
იქ, სადაც თქვენ ხართ, რომ კოდი ფაილი, სახის სასარგებლო.
ასე რომ, რა თქმა უნდა, მოდელი მოითხოვს ბაზაზე აქ
და შემდეგ ბაზაზე სტაჟიორი მოითხოვს init / თარო
და მაშინ წიგნის თარო, ეს მოითხოვს მაღალი დონის წიგნის თარო
და შემდეგ ველში იგი ინიციალიზაცია Knex მაგალითად,
რომელიც ითვალისწინებს კლიენტის სახელი
და კავშირი პარამეტრები მონაცემთა ბაზაში.
ასე რომ მე უბრალოდ გამოყენებით მარტივი მაგალითად Sequel Pro, რომელიც -
of MySQL, მე წვდომის იგი Sequel Pro და მას უბრალოდ სახის
მსგავსი მონაცემთა ბაზის setup როგორც ჩვენ გვქონდა
პირველი ნიმუში განაცხადი და რა თქმა უნდა, კატალოგი.
ასე რომ, მე ჩემს კავშირი პარამეტრები აქ,
და ეს ყველაფერი დოკუმენტურად წლის Knex.js პროექტის გვერდი
, თუ როგორ უნდა კონფიგურაცია ეს კავშირები.
ასე რომ, ახლა მე მაქვს ჩემი ბაზა მოდელი.
და როგორც აღვნიშნე ერთად პროტოტიპი ცვლილება,
ასე რომ შეიძლება რეალურად იყოს სახის ბევრი -
დასძენს ბევრი boilerplate თქვენი კოდი ისე კონვენციის
რომ უკვე ადაპტირებული by Backbone.js
და ახლა Bookshelf.js არის დაამატოთ ეს ვრცელდება მეთოდი
როგორც სტატიკური ქონების თქვენი JavaScript ობიექტი,
რომელიც აძლევს მას ერთგვარი თითქმის კლასი დაფუძნებული მემკვიდრეობის ბუნება
სადაც, თუ რეკავთ ვრცელდება შეგიძლიათ ნებისმიერი
პროტოტიპი მეთოდები რომ გსურთ აქ
და მაშინ - ნებისმიერი დამატებითი სტატიკური მეთოდები
რომ დაგვჭირდება, თქვენ შეგიძლიათ უბრალოდ მათი თქუენგან
აქ ამიტომ შეუძლია მას ერთად - ასე რომ, თუ, მაგალითად,
მრავალი მოდელები საჭირო ხატულა სახელის და ეს კიდევ სახელწოდება.
ასე რომ, აქ, მე ვამბობ, ხატულა სახელის მოდელის
სტანდარტულად არის, რასაც მისი სახელი უძრავი ქონება სხვაგვარად დაბრუნება
no name.
და ახლა ყველა მოდელი, რომელიც არის -
, რომელიც ვრცელდება ამ ბაზის მოდელი, მე ახლა აქვს ხატულა სახელის მეთოდი
on პროტოტიპი ჯაჭვი სადღაც.
და თუ მე გადავაწერო მე შემიძლია მხოლოდ მითითებული ეს - მითითებული, რა -
getname იქნება აქ.
და ეს საშუალებას გაძლევთ mimic კლასიკური მემკვიდრეობა
in JavaScript, რომელიც შეიძლება იყოს ლამაზი კონკრეტული რამ,
რომ სარგებლის თავად მიმდინარეობს დონის საფუძველზე, როგორიცაა ობიექტის მოდელები.
მოდით ხტომა უკან განაცხადის კოდი.
მე მაქვს მარშრუტი მხოლოდ slash, მხოლოდ ჩემი ინდექსი
და შემდეგ ირიბის კურსები.
და ორივე მოუწოდებენ renderCourses მეთოდი.
ასე რომ კიდევ ერთხელ, ფუნქციები პირველი კლასის და შეიძლება გავიდა
როგორც არგუმენტები მეთოდები.
ასე რომ, ამ app.get, მე მოუწოდებდა -
მე გავლით renderCourses როგორც არგუმენტი.
და გამოიტანოს - ან ფუნქციები შეიძლება setup მოსწონს var -
როგორც მე აკეთებდა ადრე var renderCourses შეადგენს ფუნქცია
ან ისინი შეიძლება იყოს მხოლოდ ფუნქცია renderCourses.
ეს არ არის ძალიან დიდი სხვაობა.
თქვენ შეგიძლიათ რეალურად რა ეწოდება სახელით ფუნქცია
გამოთქმები, რომლებიც var renderCourses შეადგენს
ფუნქცია renderCourses.
და, იმ მიზეზით, რომ გსურთ აქვს ასახელებს ფუნქციების განსაკუთრებით
ამ კვანძში არის ის, რომ გაძლევთ სუფთა -
უფრო იკითხება დასტის კვალი.
ასე რომ, თუ თქვენ გაქვთ მთელი bunch
ანონიმური ფუნქციები იგი იტყვის -
როდესაც თქვენ გაქვთ შეცდომა თქვენს კოდი you'll -
თქვენ არ იცით, თუ რომელი ფუნქცია ის მოუწოდებდა ნეტავ უნდა გამოიყურებოდეს
ერთი კოდი ნომერი და ხაზის ნომერი
და ეს ზოგჯერ ადვილი უბრალოდ ვიზუალურად გარჩევის
როდესაც თქვენ ნამდვილად აქვთ სახელები
რომ ფუნქციები თავად სერვერის მხარეს.
ასე რომ, ეს renderCourses, მოდით მოვუწოდებთ კვანძის apps -
ასე რომ მე მოსმენის შესახებ Core 3000 [ფონეტიკური].
და ა.შ. ეს ყველაფერი აკეთებს უფლება აქ მხოლოდ მისაღებად ყველა
სპეციალური მონაცემთა ბაზიდან.
მე კი არ ზღუდავს მას ასე რომ, ის აკეთებს დიდი რაოდენობით
სტრიქონების ის დაბრუნების.
და იმისათვის, რომ ამის გაკეთება,
რა თქმა უნდა, მოდელი არსებობს არის სტატიკური ქონება
მოუწოდა კოლექცია.
და ამიტომ მხოლოდ მას - I განაცხადა, ახალი კოლექციის შექმნა
ეს რა თქმა უნდა, და მაშინ მოიტანონ ის,
და შემდეგ დაბრუნდება კურსები შეგროვების აქ დაპირება.
ასე იძულებით, დავით - ბოლო ნახევარი ასწავლიან ცოტა
შესახებ დაპირებები და დაპირებები გამოიყენება ძალიან მძიმედ ორივე Knex
და წიგნის თარო, რადგან ეს lends -
ეს გაძლევთ უნარი აქვს bunch
სხვადასხვა ასინქრონული ზარი და სახის შეუერთდება მაშინ ერთად
ან მოიტანონ რაღაც, და შემდეგ
რომ ზარი სხვა ასინქრონული მონაცემთა ბაზის დარეკეთ
და დაბრუნდება რომ ღირებულება და მაშინ გადადით მომდევნო შემდეგ
და მომავალ შემდეგ და შემდეგ აქვს დაჭერა ბოლომდე დასალაგებლად
of mimic ასინქრონული ცდილობენ დაჭერა ქცევის ასინქრონული კოდი
იმიტომ, რომ თქვენ ხედავს, რომ ახლა,
მაგრამ ეს კიდევ უფრო რთული ერთხელ თქვენ დაიწყოს გაუმკლავდეთ მას.
ასინქრონული კოდი უბრალოდ ყველგან
ამ სერვერის მხარეს JavaScript და მართლაც ბევრად უფრო მეტი
ვიდრე თქვენ გამოიყენება, თუ თქვენ გაკეთდეს JavaScript
კლიენტის მხარეს.
ასე რომ, რეალურად, მართლაც დაგეხმარათ არსებობს.
მაგრამ მხოლოდ გაჩვენოთ debugger განაცხადი
რომ მე ლაპარაკი კვანძის ინსპექტორი ინსტრუმენტები,
მე ვაპირებ წავიდეთ წინ და იმისათვის, რომ debugger ხაზი აქ
ამ renderCourses ფუნქცია და ვნახოთ, სად რომ გამახსენა
როდესაც მე - ასე კვანძის ინსპექტორი შეიძლება დამონტაჟდეს
ამით NPM Install ერთად G დროშა,
რაც იმას ნიშნავს, გლობალური Node ინსპექტორი.
და ეს კიდე მოიტანონ ეს NMP და დააინსტალირეთ გლობალურად
თქვენი განცხადებები ასე რომ თქვენ შეგიძლიათ მხოლოდ მას
საწყისი ბრძანებათა სტრიქონიდან.
მე უკვე დამონტაჟებულია ეს ასე რომ მე წავიდეთ წინ და -
რეალურად ეს ალბათ დაველოდოთ ეს უბრალოდ მიიღოს,
ორი წამი.
და რა კვანძის ინსპექტორი კიდევ ერთხელ გაძლევთ საშუალებას
გავაკეთოთ აქვს ამ headless მობილური debugger console
რომ თქვენ გამოიყენება, როდესაც მუშაობა კლიენტის მხარეს და შეძლებს
შეჩერება, უბრალოდ დაამატოთ მითითებული მიუთითებს თქვენს კოდი.
შეწყვიტოს აღსრულება და მიიღოს შევხედოთ, თუ რა ხდება,
რომელსაც ექნება ნამდვილად მოდის მოსახერხებელი თუ ფუნქცია
მოსწონს, რომ იყო შესაძლებელი
როდესაც გამართვის თქვენი PHP კოდი დარწმუნებული ვარ.
მოდით უბრალოდ მიიღოს შევხედოთ, რომ.
ასე, რომ შეიძლება მხოლოდ მოვუწოდებთ კვანძის ინსპექტორი
და ეს კიდე ამბობენ, ეს URL port 5858 უნდა დაიწყოს გამართვის,
ეს მხოლოდ რა როგორ იწყება up.
ასე რომ, მე ახლა მივიღე - იქ არაფერი ხდება აქ
იმიტომ, რომ მე უნდა დაიწყოს.
ასე რომ კვანძის ჩიხიდან [ფონეტიკური] გამართვის დროშა და შემდეგ app.js.
ასე რომ, ის ამბობს debugger მოსმენის პორტის 5858,
Express სერვერზე მოსმენის 3000.
ასე რომ ჩვენ კარგი წასვლა.
ნება მომეცით უბრალოდ refresh ეს.
და ახლა მე ვხედავ app.js კოდი, რომელიც მე უბრალოდ ეძებს
მაგრამ აქ კონსოლი.
ახლა, თუ ვცდილობ აწარმოებს ამ, თქვენ ხედავთ, ის შეწყვეტს.
ის მხოლოდ ელოდება, რადგან მისი მთელი კოდი აღსრულება არის
გააჩერა ამ debugger ხაზი, რომ მე დააყენა იქ.
და მე ახლა სერვერზე -
[Inaudible შენიშვნა]
Oh, yeah. რა არის საკვანძო სიტყვა მალსახმობი მასშტაბირება ეკრანზე?
Oh არსებობს.
მივიღე ეს. OK.
[პაუზა]
ოჰ, ის არ ეძებს [ფონეტიკური] რომ.
ასე რომ, კურსები მართლაც დიდი
იმიტომ, რომ მე არ აკეთებს ზღუდავს პუნქტი ან არაფერი,
უბრალოდ მიღება მთელი მონაცემთა ბაზის კურსები
რომლებიც ბევრი მათგანი.
და ასე - რაც ობიექტი
რომ რეალურად შეიძლება ავარიის შენიშვნა ინსპექტორი მაგალითად.
It's - OK.
ნება მომეცით გავაკეთოთ ლიმიტი და მაშინ ჩვენ შეგვიძლია შევხედოთ
როცა ეს არ მიღება ასობით კურსები.
ასე რომ, მოკვლა სერვერზე და ინსპექტორი
და მე გავაკეთებ, რა თქმა უნდა შეგროვების შეკითხვაზე ლიმიტი 20.
ასე რომ, წიგნის თარო, განსხვავებით Laravel
სადაც შეგიძლიათ მხოლოდ დარეკვა ზღუდავს პირდაპირ ან დარეკეთ ნებისმიერი
ამ SQL მეთოდები რომ გამოიყენოთ
to პირდაპირ ORM მაგალითად.
ნებისმიერ დროს, რომ თქვენ იყენებთ მხოლოდ SQL მეთოდი, რომელიც ხორციელდება
in Knex, თქვენ უნდა დარეკეთ შეკითხვის დასალაგებლად
საქართველოს Tap შევიდა შეკითხვაზე ჯაჭვი.
და ეს შეიძლება გამოყენებულ იქნეს ან ფუნქცია,
ასე რომ, შეიძლება ითქვას, ფუნქცია ეს ლიმიტი 10 ან თქვენ ეძახით
განსაზღვრით, რომელიც საშუალებას გსურთ დარეკეთ
წლის Knex მაგალითად და შემდეგ, რომლის ღირებულება.
ამიტომ, ჩვენ ვაპირებთ, რომ გავაკეთოთ შეზღუდოს 20 და შემდეგ მითითებული.
ჩვენ რეალურად არ უნდა debugger აქ
იმიტომ, რომ ჩვენ შეგვიძლია მხოლოდ მითითებული breakpoints
და რომ ხდის ადვილია.
ყველა უფლება.
ასე რომ, მოდით მითითებული breakpoint უფლება აქ და ცდილობენ, რათა ჩატვირთოს ის.
არასწორი ხაზი.
უფლება აქ.
[პაუზა]
OK. ასე რომ, იგი შეჩერდა ერთხელ.
ახლა, კურსები ობიექტის სიგრძით 20
და ვხედავთ, ყველა სხვადასხვა მოდელები, რომ ეს fetched
მონაცემთა ბაზიდან უფლება აქ მე მაქვს მოდელი ობიექტი
რომელსაც აქვს, შიგნით ატრიბუტები ქონება
ობიექტი არის ყველაფერი, რომ ის ნაპოვნი მონაცემთა ბაზაში.
ნებისმიერი ღონისძიებები, რომლებსაც აქვთ რეგისტრირებული
ასე რომ შეგიძლიათ დარეგისტრირდეთ სხვადასხვა ღონისძიებები,
მაგალითად, როდესაც მოდელი ამოშლა
ან, როდესაც ის მიმდინარეობს fetched,
შეგიძლიათ დააყენოთ სხვადასხვა თვისებები ან შეცვალოთ რამ.
არსებობს ბევრი სხვადასხვა კაკვები და ეს ყველაფერი დოკუმენტურად
ამ Bookshelf.js დოკუმენტაცია, რომელიც საშუალებას გაძლევთ
გავაკეთოთ ერთგვარი არაფერს რომ თქვენ ნამდვილად გსურთ
თქვენი მოდელები და კოლექციების.
თქვენ შეგიძლიათ - ისინი ნიშნავდა მართლაც დააკონფიგურიროთ
და მართლაც ადვილი თქვენ ადაპტირება მათ
საჭიროებების თქვენი განაცხადის.
მაგრამ მხოლოდ გადახედეთ აქ,
მე ვხედავ, რა სხვადასხვა კურსები ხელმისაწვდომია.
და ამ შემთხვევაში, მე რეალურად არ მოიტანონ
ნებისმიერ სხვა მონაცემები, გარდა მხოლოდ სპეციალური თავს.
მაგრამ მსგავს მოდის მჭერმეტყველი ORM შეგიძლიათ
ურთიერთობები, ამიტომ, რა თქმა უნდა ეკუთვნის მრავალი ინსტრუქტორი.
ასე რომ, თუ მე წავიდეთ წინ და შეწყვიტოს გამოყენების,
გადადით ამ მოიტანონ ზარი, თქვენ შეგიძლიათ მიუთითოთ სხვადასხვა პარამეტრების
რომ თქვენ მინდა გაივლის გასწვრივ მას.
და ერთი მათგანი არის უნარი, რათა ჩატვირთოს მონათესავე კოდი
განსაზღვრით withRelated ინსტრუქტორები შემდეგ კურსებს.
მოდით დავუბრუნდეთ და სუფთა ეს აქ და შეწყვიტოს ერთხელ.
ახლა, სპეციალური ობიექტი, იმავე რაოდენობის მოდელები,
მაგრამ ახლა თითოეული მოდელი აქვს ურთიერთობების hash
რომელსაც აქვს ინსტრუქტორები რომ ეს არის დაკავშირებული.
ასე რომ, ეს, რა თქმა უნდა, მაგალითად,
რომელიც რა თქმა უნდა, 082 აქვს ორი დაკავშირებული ინსტრუქტორი მოდელები.
და შეგიძლიათ უკვე ვხედავ, როგორ ბევრად უფრო ადვილია, ეს არის დასალაგებლად
ვიზუალურად მუშაობა, ვიდრე როდესაც თქვენ საქმე პერსონალი
რომ თქვენ ერთგვარი შეცვალოთ კოდი და შემდეგ ცდილობენ კიდევ ერთხელ PHP.
ის ფაქტი, რომ თქვენ შეგიძლიათ მხოლოდ შეწყვიტოს აღსრულება მთლიანად
და შეაფასოს, რა არის აქ და - ამ კონსოლი, -
დააშორებს, კურსები, თქვენ იცით,
რა, რომ ადგილობრივი ფარგლებში ცვლადები ხელმისაწვდომია
და ეს არის გაკეთებული გლობალურ ობიექტი, რადგან თქვენ ხედავთ, რომ ეს,
თუ თქვენ მოვუწოდებთ ერთად კონკრეტულ კონტექსტში, ის არ აპირებს
აქვს რაღაც შესაბამისი აქ.
და შემდეგ, - ნება მომეცით ნახოთ რამდენიმე მაგალითი
ახორციელებს დაპირებები.
ასე რომ ნაცვლად აკეთებს ამ withRelated ინსტრუქტორები აქ ვარ
ვაპირებ წავიდეთ წინ და გადაადგილება ამ მოიტანონ და შემდეგ სპეციალური,
მე ვაპირებ დაბრუნებას courses.load ინსტრუქტორები.
და მაშინ - მაშინ დარეკეთ შემდეგ.
[პაუზა]
ასე რომ, ამ ეტაპზე, სპეციალური უნდა ჩაიტვირთოს
ინსტრუქტორებთან, რომელიც არის ასინქრონული action.
არამედ იმიტომ, რომ ჩვენ დაბრუნებისას ეხლა დაპირება, მომავალი ღირებულება
მაშინ არის რასაც ამ ასინქრონული ზარის ბრუნდება
რომელიც ამ შემთხვევაში დატვირთვა არის მეთოდი წიგნის თარო
რომ რეალურად ბრუნდება შეგროვების თავად.
ამიტომ ჩატვირთვის ინსტრუქტორები იქ
და შემდეგ თქვენ შეგიძლიათ მიუთითოთ - თუ ის მხოლოდ ერთი ქონება,
თქვენ შეგიძლიათ მიუთითოთ ამ როგორც სიმებიანი, წინააღმდეგ შემთხვევაში,
შეგიძლიათ გააკეთოთ ინსტრუქტორები და მოთხოვნები
როგორც მეთოდი - უკაცრავად, როგორც მასივი.
და შემდეგ, თუ გსურთ მიიღოთ მართლაც ლამაზი და შეზღუდვის ნებისმიერი
ამ მოცემული fetches, თქვენ შეგიძლიათ მიუთითოთ, როგორც hash
ინსტრუქტორების და მერე რა გსურთ ზღუდავს სიტყვის.
ასე რომ, მინდა ჩატვირთოს ყველა ინსტრუქტორები კურსები, სადაც -
ასე რომ QB განთავსების შეკითხვაზე მშენებელი სადაც status არის აქტიური.
და შეგიძლიათ მიიღოთ ნამდვილად ლამაზი ნებისმიერი
დაკავშირებული queries გსურთ აშენება.
მაგრამ, მხოლოდ ახლა, ჩვენ ვაპირებთ ჯოხი მხოლოდ ინსტრუქტორები
და ჩვენ დაბრუნების რომ ღირებულება
ასეა, მაშინ მომდევნო, მაშინ უნდა აქვს ყველა სპეციალური დატვირთული
up სწორად.
და თუ იყო შეცდომა ნებისმიერი ნაბიჯი, რომ ჯაჭვი,
ეს იქნებოდა ხტომა ქვემოთ დაჭერა.
მოდით წავიდეთ წინ და აწარმოებს, რომ.
ასე რომ, ყოველ ჯერზე, - განსხვავებით PHP, ერთი downside არის
"იმიტომ, რომ კვანძის" არის ხანგრძლივი გაშვებული პროცესში, თქვენ რეალურად სჭირდება
შეჩერება კვანძის პროცესი როგორც თქვენ განახლება თქვენი კოდი,
რადგან მობილური, რომ ეს გაშვებული პერსპექტივაში დრო არის,
მობილური კოდი, რომელიც იყო დატვირთული
როდესაც დაიწყო არა რა გაქვთ სახის
განახლებული თქვენი კოდი და მას შემდეგ.
OK. ჩვენ მითითებული breakpoint აქ, აქ და განახლება.
[პაუზა]
ოჰ, მე რეალურად არ ამოცნობა ამ გვერდზე ან
ასე იყო ძველი პროცესში.
ასე, რომ თქვენ ამოცნობა ორივე ამ და კვანძის ინსპექტორი.
ახლა ჩვენ ვხედავთ, კურსები.
თუ ჩვენ მხოლოდ მიიღოს ნიმუში ერთი ამ მოდელებს,
ჩვენ ვხედავთ, რომ ურთიერთობები ობიექტი არის ცარიელი, მაგრამ ახლა -
და მიზეზი, რომ თქვენ უნდა მითითებული breakpoints არის, ასევე,
აღვნიშნე, რომ თქვენ შეგიძლიათ ხტომა შევიდა დასტის კვალი
და თქვენ იცით, სადაც ის აპირებს ამ app.
ასე რომ, ახლა მე ვხედავ, რა არის ხდება დატვირთვის მეთოდი,
რომელიც მე განისაზღვრება წლის კოლექცია.
ეს ერთგვარი "გულითადად იტვირთება ურთიერთობები გადატანა უკვე ".
და თქვენ შეგიძლიათ დაიხევს მეშვეობით და ვხედავ ხაზს
სადაც ეს პერსონალის აპირებს რაც საკმაოდ დიდი.
თუ თქვენ გაქვთ რაიმე რომ გატეხილი თქვენი კოდი,
ის სროლა რამდენიმე შეცდომა და თქვენ, ისევე როგორც, მე ნამდვილად მინდა
ვხედავ, სადაც ეს ხდება.
მაგრამ, როგორც კი თქვენ გადაეყარონ რაღაც ასინქრონული, -
იგი მიდის შემდეგ მონიშნეთ ღონისძიების loop
და თქვენ დაკარგოთ - თქვენ დაკარგავთ თქვენი ადგილი
ამ კვანძის ინსპექტორი.
ასე რომ თქვენ უნდა ვთქვა, "OK, ერთხელ მე დაკარგოს,
ეს უნდა შეწყდეს ამ ხაზის ისევ. "
"მიზეზი, თუ მე ინახება hitting down, ქვემოთ დასტის,
ეს იქნებოდა საბოლოოდ მხოლოდ გამქრალა ჰქონდა მე არ მითითებული ამ
ხაზი 22 ლურჯი შესვენების ონლაინ.
ახლა, თუ გავითვალისწინებთ at გაკვეთილები აქ,
ეს უნდა on მიზეზი ინსტრუქტორები
და მაშინ აქვს ინსტრუქტორები ანიჭებენ მათ.
ასე რომ, თქვენ ხედავთ, რომ დავბრუნდი დაპირება პირველი დაპირება
და მაშინ მუდმივად გავაკეთოთ, რომ ქვემოთ ხაზი.
ასე რომ, სხვადასხვა დაპირება, გპირდებით, ბიბლიოთეკები,
მე ერთი მოუწოდა Bluebird რომელიც ნამდვილად სასარგებლოა.
იგი დასძენს ბევრი ლამაზი ამ შეცვლის ასინქრონული -
იცვლება გადმორეკეს ბაზის კოდი შევიდა პერსონალი
რომ კარგად მუშაობს დაპირებები.
მაგრამ - უკაცრავად [inaudible] რა მივდიოდი ვთქვა, რომ ეს არ არსებობს.
მოდით შევხედოთ თუმცა -
მოდით ვთქვათ, რომ იყო პრობლემა, როდესაც მიღება რაღაც.
ასე რომ, მე ამ მეორე მარშრუტი იპოვოს მოუწოდა თქმა პირადობის მოწმობა.
ასე რომ მოდით რა თქმა უნდა, 2.
შემიძლია - JSON რა თქმა უნდა.
და ეს იმას [inaudible].
[პაუზა]
მე სუნი რაღაც აქ.
არა 3000, ვიყავი Chrome ინსპექტორი tab.
OK. მოდით წავიდეთ რა თქმა უნდა - JSON კურსი 1.
და ეს დააბრუნებს მხოლოდ JSON ფორმატი, რა თქმა უნდა, დატვირთული
რაიმე ინსტრუქტორები.
მაგრამ მაგალითად მინდოდა მისცეს აქ არის ის, რომ
ვაკეთებ JSON კურსი პირადობის მოწმობა.
და მოიტანონ პარამეტრების, მე მიუთითებს მოითხოვს ნამდვილი,
რომელიც არის ვარიანტი, რომ დოკუმენტირებული წიგნის თარო
სადაც ის ამბობდა, რომ "იმ შემთხვევაში, თუ ვცდილობ და იპოვოს ამ კურსს
და ეს არ არის, მაშინ ჩააგდოს შეცდომა. "
და რომ უნდა დაიჭირეს მიერ დაჭერა დაბლოკოს ქვემოთ აქ.
მოდით წავიდეთ წინ და ხტომა უკან თარგმნეს კვანძის ინსპექტორი და ცდილობენ
და შესვენება და ვნახოთ, რა მივიღეთ.
მოდით მითითებული შესვენების აქ JSON რა თქმა უნდა.
ყველა უფლება.
მე წასვლა JSON კურსი და მე უბრალოდ დააყენა ზოგიერთ -
[პაუზა]
ეს შეიძლება იყოს პატარა სახიფათო ზოგჯერ, როდესაც თქვენ ცდილობთ
მართვა, რომელიც ერთი უკვე განახლება
და რომელიც არ მაქვს - ვნახოთ.
ამიტომ მოუწოდებდა შეცდომა ცარიელი საპასუხოდ.
[პაუზა]
მოდით ჩააგდოს debugger აქ.
რადგან, თუ როგორ კვანძის რეალურად optimizes
რომ JavaScript runtime იმდენად სწრაფად სერვერზე,
ზოგჯერ კვანძის debugger აქვს გარკვეული შეცდომები როცა თქვენ ცდილობენ
და მითითებული breakpoints დინამიურად და თქვენ ნამდვილად არ გვჭირდება
გამოყენება debugger და არ არის line-by-line.
მოდით ვნახოთ, თუ ამ იღებს us რაც ჩვენ გვინდა.
ასე რომ, მე მითითებული, app.get JSON რა თქმა უნდა, id,
და მე ჩემს debugger არსებობს
ამ catch განაცხადი ბოლოში.
მოიტანონ მოითხოვს ასეა, ეს უნდა - ყველა უფლება, იქ წავიდეს, დაარღვია.
ასე რომ, ახლა მე ვხედავ რომ იგი შეჩერდა
ამ საბოლოო catch ბლოკი რადგან withRelated -
ან იმიტომ, რომ მოითხოვოს ნამდვილი მითითებული და არ არსებობს, რა თქმა უნდა
პირადობის ამ დიდი ნომერი მეშვეობით გამონაკლისი
რომელიც არის Emessage.
და თითოეული შეცდომა JavaScript აქვს დასტის ქონება
რომ მოდის ერთად იგი.
ასე რომ, ხშირად სასარგებლო იმისათვის, რომ, მაგალითად,
ნუგეშია სისტემიდან გამოსვლა e.stack.
და მე შემიძლია რეალურად ვხედავ როდესაც მე მოხვდა შეცდომა.
ასე რომ, მე შეცდომა ცარიელია საპასუხოდ, რომ გაგზავნა
რომ გაეგზავნა მეშვეობით წიგნის თარო.
მაგრამ ახლა, მე შემიძლია შევხედოთ ზე, ერთი ზარი დასტის და ვნახოთ
რომ წიგნის თარო დიალექტი SQL მოდელი 83,
ამ ცარიელი პასუხი შეცდომა ესროლეს.
და ეს არის, სადაც მე აღინიშნა, რომ ეს dot ანონიმური
იმიტომ, რომ ეს ანონიმური ფუნქცია.
თუ ეს იყო სახელი ფუნქცია თქვენ უნდა უკეთესი იდეები
რომელიც ფუნქციონირებს რეალურად მეშვეობით გარეშე წასვლა
შევიდა model.js კოდი.
მიუხედავად იმისა, რომ ეს ნიშნავს, რომ საკმაოდ, საკმაოდ იკითხება,
ასე რომ, მე ვხედავ, რომ ონლაინ რეჟიმში.
რა უთხრეს ჩემთვის იყო ხაზი 83.
ასე რომ, თუ options.require და პასუხი არ არსებობდა,
ეს არის ისვრის new ცარიელი პასუხი შეცდომა.
ასე რომ თქვენ ხედავთ საკმაოდ პირდაპირი, როგორ მუშაობს.
და იძულებით in წიგნის თარო,
იქ უბრალოდ მთელი bunch გამოყენების დაპირებები.
ასე, რომ თქვენ შეგიძლიათ მიუთითოთ Promise.method
ერთად Bluebird ბიბლიოთეკა რომელიც ინახავს სწორი კონტექსტში
ამ ხოლო დაბრუნების დაპირება.
და ა.შ. მე - მე სავალდებულოა ღირებულება ამ მსგავსი
რა მინდა აღნიშნა ადრე, მაგრამ გამოყენებით დაპირებებს
და მაშინ მე შემიძლია - ეს არის ახალი.
ეს შეიძლება იყოს ასინქრონული თუ არა, თუ მე მინდა.
და მერე გავაკეთოთ ზოგიერთი სხვა რამ, რომელიც შეიძლება
ან არ შეიძლება იყოს ასინქრონული და შემდეგ სახის jumps ქვემოთ ეს.
ასე Promise.all არის დამხმარე, რომ ბევრი პოპულარული ბიბლიოთეკები აქვს
სადაც შეგიძლიათ აქვს array პოტენციურად შეუძლია
ან არ შეიძლება იყოს დაპირებები.
და კიდევ ყველა იმ დასრულდა, თქვენ დაბრუნდება, რომ
და მაშინ jumps შემდეგი ხაზი
და თქვენ შეგიძლიათ ნახოთ თუ როგორ ეს ნამდვილად flattens out პირამიდის
რომ თქვენ, გადმორეკე ჯოჯოხეთი, როგორც მისი ცნობილი
თუ თქვენ აკეთებთ ყველაფერს ერთად callbacks ხაზს.
არსებობს გზები, რათა მიიღოთ გარშემო , მაგრამ დაპირებები ერთი
საუკეთესო საშუალებაა ჩემი აზრით,
მართლაც შეინახოთ თქვენი კოდი სუფთა და ადვილად წასაკითხი.
ასე რომ, მხოლოდ მოკლე შესავალი JavaScript
და თარო და Knex კულტურას.
და, თუ არსებობს რაიმე შეკითხვები, მე ვიცი, რომ ერთი ტონა მასალა
სახის ცდილობენ და საფარი განსაკუთრებით მას შემდეგ, ენებზე,
განსხვავებით, რომ თქვენ ხართ იცნობს, ასე რომ მე უბრალოდ მინდოდა
ისე, რომ მინიმუმ თუ თქვენ მქონე პრობლემები
თქვენი კოდი, თქვენ შეგიძლიათ სახის მიცემას -
ის, რაც მე მინდა გავაკეთოთ, არის ის, სახის ხტომა შევიდა ბიბლიოთეკები
რომ მე გამოყენებით და ვნახოთ როგორ რამ სტრუქტურულად.
არსებობს ერთი, რომ მე მოხსენიებული ადრე მოუწოდა Backbone.js
და რეალურად ეს [Inaudible] კლიენტის მხარეს
დაეხმაროს მისცეს მოდელი კალენდარი კონტროლერი სტრუქტურა
თქვენს კოდი.
მაგრამ ეს რეალურად აქვს ანოტირებული დოკუმენტაცია წყარო
რომელიც საშუალებას გაძლევთ სახის ვხედავ.
ეს ნამდვილად კარგად დოკუმენტირებული, თუ რა ხდება,
როგორ ის augmenting Ajax ფუნქციონირება
ან იმ შემთხვევაში ფუნქციონალურობა მოდელები და კოლექციები სახის
აეხსნა, თუ რა არის მიმდინარეობს პროცესი.
და თუ გესმით საფუძვლები JavaScript
ისევე როგორც prototypal მემკვიდრეობა და თუ ფუნქცია გამოიყენება
როგორც ობიექტები და ღირებულებები და კლასები და ყველაფერი.
ეს ხდის ბევრი ადვილია რომ გავიგოთ, რა ხდება
პოტენციურად შეუძლიათ ბიბლიოთეკების, რომ თქვენ იყენებთ
და debugger კოდი და შეძლებს არ უნდა banging თქვენი უფროსი
წინააღმდეგ კედელზე, რადგან თქვენ არ მესმის, როგორ
სხვადასხვა ცალი ვმუშაობთ, ასე რომ.