ฉันพยายามที่จะทำความเข้าใจกับยูทิลิตี้ของ backbone.js จากเว็บไซต์ของhttp://documentcloud.github.com/backboneแต่ฉันยังไม่สามารถเข้าใจได้มากนัก
ใครช่วยฉันได้โดยอธิบายว่ามันทำงานอย่างไรและมีประโยชน์ในการเขียน JavaScript ที่ดีขึ้นได้อย่างไร
ฉันพยายามที่จะทำความเข้าใจกับยูทิลิตี้ของ backbone.js จากเว็บไซต์ของhttp://documentcloud.github.com/backboneแต่ฉันยังไม่สามารถเข้าใจได้มากนัก
ใครช่วยฉันได้โดยอธิบายว่ามันทำงานอย่างไรและมีประโยชน์ในการเขียน JavaScript ที่ดีขึ้นได้อย่างไร
คำตอบ:
Backbone.js นั้นเป็นเฟรมเวิร์คแสงที่ช่วยให้คุณสามารถสร้างโค้ด Javascript ของคุณในรูปแบบMVC (Model, View, Controller) ที่ ...
รุ่นเป็นส่วนหนึ่งของรหัสของคุณที่ดึงและเติมข้อมูล
มุมมองคือการแสดง HTML ของโมเดลนี้ (มุมมองเปลี่ยนไปเมื่อโมเดลเปลี่ยนแปลง ฯลฯ )
และคอนโทรลเลอร์เสริมซึ่งในกรณีนี้จะช่วยให้คุณสามารถบันทึกสถานะของแอปพลิเคชัน Javascript ของคุณผ่าน URL hashbang ตัวอย่างเช่น: http://twitter.com/#search?q=backbone.js
ข้อดีบางประการที่ฉันค้นพบด้วย Backbone:
ไม่มี Javascript Spaghetti อีกต่อไป: โค้ดถูกจัดระเบียบและแยกย่อยเป็นไฟล์. js ที่สื่อความหมายซึ่งจะรวมกันในภายหลังโดยใช้ JAMMIT
ไม่ต้องjQuery.data(bla, bla)
: ไม่จำเป็นต้องเก็บข้อมูลใน DOM, เก็บข้อมูลในแบบจำลองแทน
การผูกเหตุการณ์ใช้งานได้
มีประโยชน์อย่างมากห้องสมุดยูทิลิตี้ขีดล่าง
รหัส backbone.js เป็นเอกสารที่ดีและอ่านได้ดี เปิดตาของฉันกับเทคนิคของรหัส JS
จุดด้อย:
นี่คือชุดบทเรียนที่ยอดเยี่ยมเกี่ยวกับการใช้ Backbone กับ Rails เป็น back-end:
CloudEdit: การสอน Backbone.js ด้วย Rails:
http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/
http://www.jamesyu.org/2011/02/09/backbone.js-tutorial-with-rails-part-2/
ps นอกจากนี้ยังมีคลาสCollection ที่ยอดเยี่ยมที่ให้คุณจัดการกับคอลเลกชันของโมเดลและโมเดลที่ซ้อนกันเลียนแบบได้ แต่ฉันไม่ต้องการสร้างความสับสนให้คุณตั้งแต่เริ่มต้น
ɯnɯıuıɯ ʇunoɔ ɹǝʇɔɐɹɐɥɔ
data-
คุณสมบัติกลับไปที่องค์ประกอบ DOM (ดังนั้นหาก HTML ของคุณมีdata-
คุณสมบัติเมื่อโหลดหน้าเว็บและมีการเปลี่ยนแปลง DOM และการเป็นตัวแทนในหน่วยความจำจะเป็น OOS - แต่คุณควรทำงานกับข้อมูลในหน่วยความจำต่อไป)
หากคุณกำลังจะสร้างส่วนต่อประสานกับผู้ใช้ที่ซับซ้อนในเบราว์เซอร์คุณอาจจะพบว่าตัวเองประดิษฐ์ชิ้นส่วนต่าง ๆ ที่ทำขึ้นเป็นเฟรมเวิร์กเช่น Backbone.js และ Sammy.js ดังนั้นคำถามคือคุณสร้างบางสิ่งที่ซับซ้อนพอในเบราว์เซอร์เพื่อทำบุญใช้หรือไม่ (คุณไม่ต้องประดิษฐ์สิ่งเดียวกันด้วยตัวเอง)
หากสิ่งที่คุณวางแผนที่จะสร้างคือสิ่งที่ UI เปลี่ยนวิธีการแสดงเป็นประจำแต่ไม่ไปที่เซิร์ฟเวอร์เพื่อรับหน้าใหม่ทั้งหมดคุณอาจต้องใช้ Backbone.js หรือ Sammy.js ตัวอย่างที่สำคัญของบางสิ่งเช่นนั้นคือ GMail ของ Google หากคุณเคยใช้มันคุณจะสังเกตเห็นว่ามันดาวน์โหลดไฟล์ HTML, CSS และ JavaScript ขนาดใหญ่หนึ่งอันเมื่อคุณล็อกอินครั้งแรกหลังจากนั้นทุกอย่างจะเกิดขึ้นในพื้นหลัง สามารถย้ายระหว่างการอ่านอีเมลและประมวลผลกล่องจดหมายและค้นหาและกลับมาอ่านทั้งหมดอีกครั้งโดยไม่ต้องขอให้มีการแสดงหน้าใหม่ทั้งหมด
มันเป็นแอพประเภทที่เฟรมเวิร์กเหล่านี้พัฒนาได้ง่ายขึ้น หากไม่มีพวกเขาคุณจะได้พบกับห้องสมุดหลายแห่งที่มีส่วนร่วมในการทำงาน (ตัวอย่างเช่น jQuery BBQ สำหรับการจัดการประวัติ, Events.js สำหรับกิจกรรม ฯลฯ ) หรือคุณจะสร้างทุกสิ่งด้วยตัวเอง และต้องบำรุงรักษาและทดสอบทุกอย่างด้วยตัวเองเช่นกัน ตรงกันข้ามกับ Backbone.js ที่มีผู้คนหลายพันคนดูบน Github ส้อมหลายร้อยที่ผู้คนอาจใช้งานอยู่และคำถามหลายร้อยคำถามที่ถามและตอบแล้วใน Stack Overflow
แต่ไม่มีความสำคัญใด ๆ หากสิ่งที่คุณวางแผนที่จะสร้างไม่ซับซ้อนพอที่จะคุ้มค่ากับช่วงการเรียนรู้ที่เกี่ยวข้องกับกรอบ หากคุณยังคงสร้าง PHP, Java หรือเว็บไซต์อื่นที่เซิร์ฟเวอร์ด้านหลังยังคงทำหน้าที่สร้างหน้าเว็บตามคำขอโดยผู้ใช้และ JavaScript / jQuery เป็นเพียงกระบวนการที่ทำคุณจะไม่ ' ยังไม่ต้องการหรือยังไม่พร้อมสำหรับ Backbone.js
... ไลบรารีขนาดเล็กมากของส่วนประกอบซึ่งคุณสามารถใช้เพื่อช่วยจัดระเบียบรหัสของคุณ มันมาพร้อมไฟล์เป็นไฟล์ JavaScript เดียว หากไม่รวมความคิดเห็นจะมี JavaScript จริงน้อยกว่า 1,000 บรรทัด มันเขียนอย่างสมเหตุสมผลและคุณสามารถอ่านได้ทั้งหมดในเวลาไม่กี่ชั่วโมง
มันเป็นห้องสมุดส่วนหน้าคุณรวมไว้ในหน้าเว็บของคุณด้วยแท็กสคริปต์ มีผลกับเบราว์เซอร์และพูดถึงเซิร์ฟเวอร์ของคุณเพียงเล็กน้อยเท่านั้นยกเว้นว่าควรเปิดเผย API ที่เงียบสงบ
หากคุณมี API, Backbone มีคุณสมบัติที่เป็นประโยชน์เล็กน้อยที่จะช่วยให้คุณพูดคุยกับมันได้ แต่คุณสามารถใช้ Backbone เพื่อเพิ่มการโต้ตอบกับหน้า HTML คงที่
... เพิ่มโครงสร้างให้กับ JavaScript
เนื่องจาก JavaScript ไม่บังคับใช้รูปแบบเฉพาะแอปพลิเคชัน JavaScript อาจยุ่งมากอย่างรวดเร็ว ทุกคนที่ได้สร้างบางสิ่งที่เกินความจำเป็นใน JavaScript จะมีโอกาสพบเจอกับคำถามเช่น:
Backbone พยายามตอบคำถามเหล่านี้โดยให้คุณ:
เราเรียกสิ่งนี้ว่ารูปแบบ MV * โมเดลมุมมองและอุปกรณ์เสริมพิเศษ
แม้จะมีการปรากฏตัวครั้งแรก Backbone มีน้ำหนักเบาน่าขนลุกมันแทบจะไม่ทำอะไรเลย สิ่งที่ทำมีประโยชน์มาก
มันให้ชุดของวัตถุเล็ก ๆ ที่คุณสามารถสร้างและที่สามารถเปล่งเหตุการณ์และฟังซึ่งกันและกัน คุณอาจสร้างวัตถุเล็ก ๆ เพื่อแสดงความคิดเห็นตัวอย่างเช่นวัตถุความคิดเห็นเล็กน้อยเพื่อแสดงการแสดงความคิดเห็นในสถานที่เฉพาะในเบราว์เซอร์
คุณสามารถบอกให้ CommentView รับฟังความคิดเห็นและวาดใหม่เมื่อความคิดเห็นเปลี่ยนไป แม้ว่าคุณจะแสดงความคิดเห็นแบบเดียวกันในหลาย ๆ ที่บนหน้าเพจของคุณการดูทั้งหมดเหล่านี้สามารถฟังรูปแบบความคิดเห็นเดียวกัน
วิธีการเขียนโค้ดนี้จะช่วยป้องกันไม่ให้คุณพันกันแม้ว่า codebase ของคุณจะมีขนาดใหญ่มากและมีปฏิสัมพันธ์มากมาย
เมื่อเริ่มออกเป็นเรื่องปกติในการจัดเก็บข้อมูลของคุณอย่างใดอย่างหนึ่งในตัวแปรทั่วโลกหรือใน DOM เป็นคุณลักษณะข้อมูล ทั้งสองอย่างนี้มีปัญหา ตัวแปรทั่วโลกสามารถขัดแย้งกันและโดยทั่วไปจะมีรูปแบบไม่ดี แอ็ตทริบิวต์ข้อมูลที่เก็บใน DOM สามารถเป็นสตริงได้เท่านั้นคุณจะต้องแยกวิเคราะห์ข้อมูลเหล่านั้นเข้าและออกอีกครั้ง เป็นการยากที่จะจัดเก็บสิ่งต่าง ๆ เช่นอาร์เรย์วันที่หรือวัตถุและแยกวิเคราะห์ข้อมูลของคุณในรูปแบบที่มีโครงสร้าง
แอตทริบิวต์ของข้อมูลมีลักษณะดังนี้:
<p data-username="derek" data-age="42"></p>
แก้ Backbone นี้โดยการให้วัตถุรุ่นเพื่อแสดงข้อมูลและวิธีการที่เกี่ยวข้องของคุณ สมมติว่าคุณมีรายการสิ่งที่ต้องทำคุณจะมีรูปแบบที่แสดงถึงแต่ละรายการในรายการนั้น
เมื่อโมเดลของคุณได้รับการอัปเดตโมเดลจะเริ่มเหตุการณ์ คุณอาจมีมุมมองที่เชื่อมโยงกับวัตถุนั้น มุมมองรับฟังเหตุการณ์การเปลี่ยนแปลงรูปแบบและแสดงผลอีกครั้ง
Backbone ให้มุมมองวัตถุที่คุยกับ DOM แก่คุณ ฟังก์ชั่นทั้งหมดที่ใช้งาน DOM หรือฟังเหตุการณ์ DOM ไปที่นี่
โดยทั่วไปมุมมองจะใช้ฟังก์ชั่นการเรนเดอร์ที่วาดมุมมองทั้งหมดใหม่หรืออาจเป็นส่วนหนึ่งของมุมมอง ไม่มีข้อผูกมัดในการใช้ฟังก์ชั่นการเรนเดอร์ แต่เป็นแบบแผนทั่วไป
แต่ละมุมมองถูกผูกไว้กับส่วนใดส่วนหนึ่งของ DOM ดังนั้นคุณอาจมี searchFormView ที่ฟังเฉพาะในแบบฟอร์มการค้นหาและ shoppingCartView ที่แสดงเฉพาะตะกร้าสินค้าเท่านั้น
โดยทั่วไปมุมมองจะผูกกับรูปแบบหรือคอลเลกชันเฉพาะด้วย เมื่อโมเดลอัปเดตโมเดลจะเกิดเหตุการณ์ที่มุมมองรับฟัง มุมมองที่พวกเขาอาจเรียกให้เรนเดอร์วาดใหม่เอง
ในทำนองเดียวกันเมื่อคุณพิมพ์ลงในแบบฟอร์มมุมมองของคุณสามารถปรับปรุงวัตถุรูปแบบ มุมมองอื่น ๆ ที่ฟังโมเดลนั้นจะเรียกฟังก์ชั่นการแสดงผลของมันเอง
สิ่งนี้ทำให้เราแยกข้อกังวลออกได้อย่างชัดเจนซึ่งทำให้รหัสของเราสะอาดและเป็นระเบียบ
คุณสามารถใช้ฟังก์ชั่นการเรนเดอร์ได้ตามที่เห็นสมควร คุณอาจใส่ jQuery ไว้ที่นี่เพื่ออัปเดต DOM ด้วยตนเอง
คุณอาจรวบรวมแม่แบบและใช้สิ่งนั้น เทมเพลตเป็นเพียงสตริงที่มีจุดแทรก คุณส่งมันไปยังฟังก์ชั่นการคอมไพล์พร้อมกับวัตถุ JSON และกลับสตริงที่รวบรวมซึ่งคุณสามารถแทรกลงใน DOM ของคุณ
นอกจากนี้คุณยังสามารถเข้าถึงคอลเลกชันที่เก็บรายชื่อรุ่นดังนั้น todoCollection จึงเป็นรายการของโมเดลสิ่งที่ต้องทำ เมื่อคอลเล็กชันได้รับหรือสูญเสียโมเดลเปลี่ยนลำดับหรือโมเดลในการอัพเดตคอลเล็กชันคอลเล็กชันทั้งหมดจะเริ่มเหตุการณ์
มุมมองสามารถฟังคอลเล็กชันและอัพเดตตัวเองเมื่อใดก็ตามที่อัพเดตคอลเล็กชัน
คุณสามารถเพิ่มวิธีการเรียงลำดับและกรองไปยังคอลเลกชันของคุณและทำให้มันจัดเรียงตัวเองโดยอัตโนมัติเช่น
มากที่สุดเท่าที่เป็นไปได้ส่วนประกอบแอปพลิเคชันจะถูกแยกออกจากกัน พวกเขาสื่อสารโดยใช้กิจกรรมดังนั้น shoppingCartView อาจฟังคอลเลกชัน shoppingCart และวาดใหม่เมื่อมีการเพิ่มรถเข็น
shoppingCartView.listenTo(shoppingCart, "add", shoppingCartView.render);
แน่นอนว่าวัตถุอื่น ๆ อาจฟัง shoppingCart ด้วยเช่นกันและอาจทำสิ่งอื่น ๆ เช่นอัปเดตผลรวมหรือบันทึกสถานะในที่จัดเก็บในตัวเครื่อง
Decoupling วัตถุของคุณเช่นนี้และการสื่อสารโดยใช้กิจกรรมหมายความว่าคุณจะไม่พันกันเป็นปมและการเพิ่มองค์ประกอบและพฤติกรรมใหม่นั้นเป็นเรื่องง่าย ส่วนประกอบใหม่ของคุณเพียงแค่ต้องฟังวัตถุอื่นที่มีอยู่แล้วในระบบ
โค้ดที่เขียนขึ้นสำหรับ Backbone จะเป็นไปตามชุดการประชุมที่หลวม รหัส DOM อยู่ในมุมมอง รหัสชุดเป็นของสะสม ตรรกะทางธุรกิจเป็นไปในรูปแบบ นักพัฒนาซอฟต์แวร์คนอื่นยกโค้ดของคุณขึ้นมาจะสามารถทำงานได้อย่างสมบูรณ์
Backbone เป็นไลบรารี่ขนาดเล็กที่ให้โครงสร้างกับโค้ดของคุณ ส่วนประกอบถูกแยกชิ้นส่วนและสื่อสารผ่านเหตุการณ์ดังนั้นคุณจะไม่ต้องวุ่นวาย คุณสามารถขยาย codebase ของคุณได้อย่างง่ายดายเพียงแค่สร้างวัตถุใหม่และให้ฟังวัตถุที่คุณมีอยู่อย่างเหมาะสม รหัสของคุณจะสะอาดกว่าและดีกว่าและบำรุงรักษาได้มากกว่า
ฉันชอบ Backbone มากจนฉันเขียนหนังสือแนะนำตัวเล็กน้อยเกี่ยวกับเรื่องนี้ คุณสามารถอ่านออนไลน์ได้ที่นี่: http://nicholasjohnson.com/backbone-book/
ฉันยังยากจนลงวัสดุเป็นหลักสูตรออนไลน์สั้น ๆ ซึ่งคุณสามารถหาได้ที่นี่: http://www.forwardadvance.com/course/backbone คุณสามารถเรียนจบหลักสูตรในหนึ่งวัน
นี่คืองานนำเสนอที่น่าสนใจ:
คำแนะนำ (จากสไลด์):
Backbone.js เป็นเฟรมเวิร์ก JavaScript ที่ช่วยคุณจัดระเบียบโค้ดของคุณ มันเป็นกระดูกสันหลังที่คุณสร้างแอปพลิเคชันของคุณ ไม่มีวิดเจ็ต (เช่น jQuery UI หรือ Dojo)
มันให้ชุดคลาสพื้นฐานที่ยอดเยี่ยมที่คุณสามารถขยายเพื่อสร้างโค้ด JavaScript ที่สะอาดที่เชื่อมต่อกับจุดปลายสงบบนเซิร์ฟเวอร์ของคุณ
JQuery และ Mootools เป็นเพียงกล่องเครื่องมือที่มีเครื่องมือมากมายในโครงการของคุณ Backbone ทำหน้าที่เหมือนสถาปัตยกรรมหรือกระดูกสันหลังสำหรับโครงการของคุณซึ่งคุณสามารถสร้างแอปพลิเคชันโดยใช้ JQuery หรือ Mootools
นี่เป็นวิดีโอเกริ่นนำที่ดีงาม: http://vimeo.com/22685608
หากคุณกำลังมองหาข้อมูลเพิ่มเติมเกี่ยวกับ Rails และ Backbone Thoughtbot มีหนังสือดี ๆ เล่มนี้ (ไม่ฟรี): https : // workshops. Thoughtbot.com/backbone-js-on-rails
ฉันต้องยอมรับว่า "ข้อดี" ทั้งหมดของ MVC ไม่เคยทำให้งานของฉันง่ายขึ้นเร็วขึ้นหรือดีขึ้นกว่านี้ มันทำให้ประสบการณ์การรหัสทั้งหมดเป็นนามธรรมและเสียเวลามากขึ้น การบำรุงรักษาเป็นฝันร้ายเมื่อพยายามดีบักความคิดของคนอื่นเกี่ยวกับความหมายของการแยก ไม่ทราบว่ามีกี่คนที่เคยพยายามอัปเดตไซต์ FLEX ที่ใช้ Cairngorm เป็นโมเดล MVC แต่สิ่งที่ควรใช้เวลา 30 วินาทีในการอัปเดตมักใช้เวลา 2 ชั่วโมง (การค้นหา / ติดตาม / การดีบักเพื่อค้นหาเหตุการณ์เดียว ) MVC เคยเป็นและยังคงเป็นประโยชน์สำหรับฉันที่คุณสามารถทำได้
นี่คือโพสต์เริ่มต้นใช้งานด่วนที่ฉันเขียนบน BackboneJS หวังว่ามันจะช่วย! http://www.infragistics.com/community/blogs/nanil/archive/2013/04/01/exploring-javascript-mv-frameworks-part-1-hello-backbonejs.aspx
backbone.js เป็นModel-View-Controller (MVC) พร้อม JavaScript แต่Extjsดีกว่า backbone สำหรับ MVC Pattern โดยจาวาสคริปต์
ด้วยกระดูกสันหลังคุณจะมีอิสระในการทำเกือบทุกอย่างที่คุณต้องการ แทนที่จะพยายามแยกผ่าน API และปรับแต่งฉันจะใช้ Backbonejs เพราะมันใช้งานง่ายและสะดวก อีกครั้งมันเป็นเรื่องยากที่จะพูดในสิ่งที่คุณต้องการจากสองคนนั้นคือห้องสมุดอีกองค์ประกอบหนึ่ง
Backbone ถูกสร้างโดย Jeremy Ashkenas ซึ่งเป็นผู้เขียน CoffeeScript ในฐานะที่เป็นแอพพลิเคชั่นที่มีจาวาสคริปต์หนักสิ่งที่เรารู้ในขณะนี้คือ Backbone รับผิดชอบในการจัดโครงสร้างแอปพลิเคชันให้เป็นรหัสฐานที่สอดคล้องกัน Underscore.js ซึ่งเป็นเพียงการพึ่งพาของแบ็คโบนเท่านั้นยังเป็นส่วนหนึ่งของแอปพลิเคชัน DocumentCloud
Backbone ช่วยให้นักพัฒนาสามารถจัดการรูปแบบข้อมูลในแอปพลิเคชันเว็บฝั่งไคลเอ็นต์ของพวกเขาด้วยระเบียบวินัยและโครงสร้างมากเท่าที่คุณจะได้รับในตรรกะแอปพลิเคชันฝั่งเซิร์ฟเวอร์แบบดั้งเดิม
ประโยชน์เพิ่มเติมของการใช้ Backbone.js
นอกจากนี้ยังเพิ่มการกำหนดเส้นทางโดยใช้ตัวควบคุมและมุมมองด้วย KVO คุณจะสามารถพัฒนาแอปพลิเคชัน "AJAXy" ได้
เห็นว่าเป็น Sproutcore หรือ Cappuccino framework ที่มีน้ำหนักเบา
เป็นรูปแบบการออกแบบ MVC ด้านลูกค้าเชื่อฉัน .. มันจะช่วยให้คุณประหยัดรหัสตันไม่ต้องพูดถึงรหัสที่ชัดเจนและชัดเจนมากขึ้นง่ายต่อการรักษารหัส อาจจะยุ่งยากเล็กน้อยในตอนแรก แต่เชื่อว่าฉันเป็นห้องสมุดที่ยอดเยี่ยม
คำตอบที่ดีมากมายแล้ว Backbone js ช่วยในการจัดระเบียบโค้ด การเปลี่ยนรุ่น / คอลเลกชันจะดูแลมุมมองการแสดงผลอัตโนมัติซึ่งจะช่วยลดค่าใช้จ่ายในการพัฒนาจำนวนมาก
แม้ว่ามันจะให้ความยืดหยุ่นสูงสุดสำหรับการพัฒนานักพัฒนาควรระมัดระวังในการทำลายโมเดลและลบมุมมองอย่างเหมาะสม มิฉะนั้นอาจมีหน่วยความจำรั่วในแอปพลิเคชัน
เว็บแอปพลิเคชันที่เกี่ยวข้องกับการโต้ตอบกับผู้ใช้จำนวนมากกับคำขอ AJAX จำนวนมากซึ่งต้องเปลี่ยนเป็นครั้งคราวและทำงานแบบเรียลไทม์ (เช่น Facebook หรือ StackOverflow) ควรใช้เฟรมเวิร์ก MVC เช่น Backbone.js มันเป็นวิธีที่ดีที่สุดในการสร้างรหัสที่ดี
หากแอปพลิเคชั่นมีขนาดเล็ก แต่ Backbone.js นั้นเกินความเป็นจริงโดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ครั้งแรก
Backbone จะให้ MVC ฝั่งไคลเอ็นต์และข้อดีทั้งหมดที่กล่าวมานี้