จุดประสงค์ของ backbone.js คืออะไร?


442

ฉันพยายามที่จะทำความเข้าใจกับยูทิลิตี้ของ backbone.js จากเว็บไซต์ของhttp://documentcloud.github.com/backboneแต่ฉันยังไม่สามารถเข้าใจได้มากนัก

ใครช่วยฉันได้โดยอธิบายว่ามันทำงานอย่างไรและมีประโยชน์ในการเขียน JavaScript ที่ดีขึ้นได้อย่างไร


36
มันเป็นกรอบ MVC มันสนับสนุนให้คุณสรุปข้อมูลของคุณเป็นแบบจำลองและการจัดการ DOM ของคุณในมุมมองและผูกทั้งสองเข้าด้วยกันโดยใช้กิจกรรม
Raynos

"มุมมอง" สามารถจัดการเหตุการณ์ด้วยในบริบทของ MVC ได้อย่างไร นี่คือสิ่งที่ backbonejs.org อ้างในการแนะนำตัว

3
มันคุ้มค่าที่จะเรียนรู้ ฉันมีช่วงเวลาที่ยากลำบากในการเริ่มต้น แต่หลังจากผ่านไปสองสามนาทีในช่วงการเรียนรู้มันก็ไม่ยากเกินไป เริ่มต้นด้วยการสาธิตไวน์เซลล่าร์
kmitchel46725

2
ภายในบริบทของ Backbone มุมมองจะเพิ่มขึ้นเป็นตัวควบคุม มันฟังเหตุการณ์ DOM และ chucks พวกเขาถึงแบบจำลองตามความเหมาะสม นอกจากนี้ยังรับฟังการเปลี่ยนแปลงโมเดลและคอลเล็กชันของคุณและวาด DOM ใหม่อย่างเหมาะสม Backbone เป็นรูปแบบ MV แต่ C เป็นนัย ถ้า Backbone เป็น Rails เทมเพลตจะเป็นมุมมองและมุมมองจะเป็นคอนโทรลเลอร์
superluminary

ฉันคิดว่ามันเป็นกรอบ MVVM เพราะมันไม่ได้ให้ตัวควบคุมจริงๆ
SoluableNonagon

คำตอบ:


393

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 ที่ยอดเยี่ยมที่ให้คุณจัดการกับคอลเลกชันของโมเดลและโมเดลที่ซ้อนกันเลียนแบบได้ แต่ฉันไม่ต้องการสร้างความสับสนให้คุณตั้งแต่เริ่มต้น


1
อีกบทช่วยสอนที่มีประโยชน์: coenraets.org/blog/2012/01/..
Jeffrey Nicholson Carré

16
คำตอบนี้ผิด Backbone ไม่ใช่กรอบ MVC มันเป็นกรอบงาน MV * การเข้าใจองค์ประกอบหลักเป็นสิ่งสำคัญ และมันไม่มีตัวควบคุม โชคดี.

3
เพียงแค่กล่าวย้ำอีกครั้งไลบรารี Backbone นั้นไม่มีตัวควบคุมแม้ว่า Jeremy Ashkenas ได้กล่าวว่ามุมมองวัตถุจะเกิดขึ้นเนื่องจากเป็นวัตถุ JavaScript ที่เป็นแบบจำลองของตัวเองและมีการสุ่มข้อมูลไปยังและจากส่วนหน้า แน่นอนว่าไม่มีสิ่งใดที่จะห้ามไม่ให้คุณนำตัวควบคุมบริการไปใช้แม้แต่ ViewModel ที่คุณต้องการมันเป็นเพียง JavaScript
superluminary

3
JAMMIT คืออะไร ɯnɯıuıɯ ʇunoɔ ɹǝʇɔɐɹɐɥɔ
user1717828

1
RE: "jQuery.data (bla, bla): ไม่จำเป็นต้องจัดเก็บข้อมูลใน DOM" IIRC, jQuery เก็บในหน่วยความจำนั้นต่อไป เช่นมันไม่ได้ตั้งค่าdata-คุณสมบัติกลับไปที่องค์ประกอบ DOM (ดังนั้นหาก HTML ของคุณมีdata-คุณสมบัติเมื่อโหลดหน้าเว็บและมีการเปลี่ยนแปลง DOM และการเป็นตัวแทนในหน่วยความจำจะเป็น OOS - แต่คุณควรทำงานกับข้อมูลในหน่วยความจำต่อไป)
JoeBrockhaus

250

หากคุณกำลังจะสร้างส่วนต่อประสานกับผู้ใช้ที่ซับซ้อนในเบราว์เซอร์คุณอาจจะพบว่าตัวเองประดิษฐ์ชิ้นส่วนต่าง ๆ ที่ทำขึ้นเป็นเฟรมเวิร์กเช่น 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


21
ขอบคุณสำหรับการเปรียบเทียบกับ Gmail นั่นเป็นวิธีที่ง่ายสำหรับฉันที่จะคิดออกว่าฉันไม่จำเป็นต้องตรวจสอบเพิ่มเติมสำหรับเว็บไซต์ที่ฉันกำลังพัฒนา
Eric Hu

15
+1 สำหรับการกล่าวถึงว่าคุณจะต้องเขียนอะไรบางอย่างเช่น backbone.js ด้วยตัวคุณเองถ้าโครงการของคุณมีขนาดใหญ่พอ: กฎข้อที่ 10 ของ Greenspan อีกครั้ง
Matthew Lock

หากคุณใช้ PHP หรืออะไรที่คล้ายกันเป็นจุดสิ้นสุดของบริการเว็บคุณไม่ได้ใช้เฟรมเวิร์กการพัฒนาเว็บตามสไตล์การร้องขอ / ตอบแบบดั้งเดิม 80 หรือ 90% ดังนั้นจึงมีความแตกต่างอย่างมากในการสร้างแอพประเภทนี้เมื่อเทียบกับการสร้างแอปพลิเคชันเว็บแบบดั้งเดิม
John Munsch

2
ขอบคุณ John สำหรับคำตอบของคุณ Enlightning จริงๆ
sushil bharwani

1
การอ้างอิง Gmail เปิดตาของฉันจริงๆ ขอบคุณ!
T.Kaukoranta

95

กระดูกสันหลังคือ ...

... ไลบรารีขนาดเล็กมากของส่วนประกอบซึ่งคุณสามารถใช้เพื่อช่วยจัดระเบียบรหัสของคุณ มันมาพร้อมไฟล์เป็นไฟล์ JavaScript เดียว หากไม่รวมความคิดเห็นจะมี JavaScript จริงน้อยกว่า 1,000 บรรทัด มันเขียนอย่างสมเหตุสมผลและคุณสามารถอ่านได้ทั้งหมดในเวลาไม่กี่ชั่วโมง

มันเป็นห้องสมุดส่วนหน้าคุณรวมไว้ในหน้าเว็บของคุณด้วยแท็กสคริปต์ มีผลกับเบราว์เซอร์และพูดถึงเซิร์ฟเวอร์ของคุณเพียงเล็กน้อยเท่านั้นยกเว้นว่าควรเปิดเผย API ที่เงียบสงบ

หากคุณมี API, Backbone มีคุณสมบัติที่เป็นประโยชน์เล็กน้อยที่จะช่วยให้คุณพูดคุยกับมันได้ แต่คุณสามารถใช้ Backbone เพื่อเพิ่มการโต้ตอบกับหน้า HTML คงที่

แกนหลักสำหรับ ...

... เพิ่มโครงสร้างให้กับ JavaScript

เนื่องจาก JavaScript ไม่บังคับใช้รูปแบบเฉพาะแอปพลิเคชัน JavaScript อาจยุ่งมากอย่างรวดเร็ว ทุกคนที่ได้สร้างบางสิ่งที่เกินความจำเป็นใน JavaScript จะมีโอกาสพบเจอกับคำถามเช่น:

  1. ฉันจะเก็บข้อมูลไว้ที่ไหน
  2. ฉันจะใส่ฟังก์ชั่นของฉันที่ไหน?
  3. ฉันจะโยงหน้าที่ของฉันเข้าด้วยกันอย่างไรเพื่อที่พวกเขาจะถูกเรียกอย่างสมเหตุสมผลและไม่หันไปหาสปาเก็ตตี้
  4. ฉันจะทำให้รหัสนี้สามารถบำรุงรักษาได้โดยนักพัฒนาที่แตกต่างกันอย่างไร

Backbone พยายามตอบคำถามเหล่านี้โดยให้คุณ:

  • โมเดลและคอลเล็กชันเพื่อช่วยคุณในการแสดงข้อมูลและรวบรวมข้อมูล
  • จำนวนการดูเพื่อช่วยคุณอัปเดต DOM เมื่อข้อมูลของคุณเปลี่ยนแปลง
  • ระบบเหตุการณ์เพื่อให้องค์ประกอบสามารถฟังซึ่งกันและกัน สิ่งนี้จะช่วยให้ส่วนประกอบของคุณแยกออกจากกันและป้องกันการเกิดสปาเก็ตตี้
  • ชุดการประชุมที่สมเหตุสมผลน้อยที่สุดเพื่อให้นักพัฒนาสามารถทำงานร่วมกันในรหัสฐานเดียวกัน

เราเรียกสิ่งนี้ว่ารูปแบบ 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 ด้วยเช่นกันและอาจทำสิ่งอื่น ๆ เช่นอัปเดตผลรวมหรือบันทึกสถานะในที่จัดเก็บในตัวเครื่อง

  • มุมมองฟังนางแบบและแสดงผลเมื่อแบบจำลองมีการเปลี่ยนแปลง
  • มุมมองฟังคอลเลกชันและแสดงรายการ (หรือตารางหรือแผนที่ ฯลฯ ) เมื่อรายการในคอลเลกชันมีการเปลี่ยนแปลง
  • แบบจำลองฟัง Views เพื่อให้พวกเขาสามารถเปลี่ยนสถานะบางทีเมื่อมีการแก้ไขแบบฟอร์ม

Decoupling วัตถุของคุณเช่นนี้และการสื่อสารโดยใช้กิจกรรมหมายความว่าคุณจะไม่พันกันเป็นปมและการเพิ่มองค์ประกอบและพฤติกรรมใหม่นั้นเป็นเรื่องง่าย ส่วนประกอบใหม่ของคุณเพียงแค่ต้องฟังวัตถุอื่นที่มีอยู่แล้วในระบบ

การประชุม

โค้ดที่เขียนขึ้นสำหรับ Backbone จะเป็นไปตามชุดการประชุมที่หลวม รหัส DOM อยู่ในมุมมอง รหัสชุดเป็นของสะสม ตรรกะทางธุรกิจเป็นไปในรูปแบบ นักพัฒนาซอฟต์แวร์คนอื่นยกโค้ดของคุณขึ้นมาจะสามารถทำงานได้อย่างสมบูรณ์

เพื่อสรุป

Backbone เป็นไลบรารี่ขนาดเล็กที่ให้โครงสร้างกับโค้ดของคุณ ส่วนประกอบถูกแยกชิ้นส่วนและสื่อสารผ่านเหตุการณ์ดังนั้นคุณจะไม่ต้องวุ่นวาย คุณสามารถขยาย codebase ของคุณได้อย่างง่ายดายเพียงแค่สร้างวัตถุใหม่และให้ฟังวัตถุที่คุณมีอยู่อย่างเหมาะสม รหัสของคุณจะสะอาดกว่าและดีกว่าและบำรุงรักษาได้มากกว่า

หนังสือเล่มเล็ก ๆ ของฉัน

ฉันชอบ Backbone มากจนฉันเขียนหนังสือแนะนำตัวเล็กน้อยเกี่ยวกับเรื่องนี้ คุณสามารถอ่านออนไลน์ได้ที่นี่: http://nicholasjohnson.com/backbone-book/

ฉันยังยากจนลงวัสดุเป็นหลักสูตรออนไลน์สั้น ๆ ซึ่งคุณสามารถหาได้ที่นี่: http://www.forwardadvance.com/course/backbone คุณสามารถเรียนจบหลักสูตรในหนึ่งวัน


1
มุมมองทางเทคนิคแสดงเทมเพลตไม่ใช่ "ตัวเอง" จริง ๆ หรือ ดูเหมือนว่าจะมีบทบาท 'ผู้นำเสนอ' หรือ 'ViewModel' มากขึ้น
JoeBrockhaus

1
จุดดีแม้ว่ามุมมองสามารถแสดงสิ่งที่คุณถาม นี่อาจเป็นเทมเพลต jQuery ตามอำเภอใจบางอย่างหรือแม้แต่สิ่งเล็ก ๆ เช่นค่าในแบบฟอร์มหรือตัวเลขในตราสัญลักษณ์
แสงสว่าง

3
@superluminary reallly ช่วย !!
Antoops

2
คำอธิบายที่ยอดเยี่ยม!
TastyCode

3
หนังสือมีประโยชน์มาก ขอบคุณที่เขียนมัน
Sung Cho

32

นี่คืองานนำเสนอที่น่าสนใจ:

คำแนะนำสำหรับ Backbone.js

คำแนะนำ (จากสไลด์):

  • Rails ในเบราว์เซอร์? ไม่
  • กรอบ MVC สำหรับ JavaScript หรือไม่ คล้าย ๆ
  • เครื่องไขมันขนาดใหญ่? ใช่ !

14

Backbone.js เป็นเฟรมเวิร์ก JavaScript ที่ช่วยคุณจัดระเบียบโค้ดของคุณ มันเป็นกระดูกสันหลังที่คุณสร้างแอปพลิเคชันของคุณ ไม่มีวิดเจ็ต (เช่น jQuery UI หรือ Dojo)

มันให้ชุดคลาสพื้นฐานที่ยอดเยี่ยมที่คุณสามารถขยายเพื่อสร้างโค้ด JavaScript ที่สะอาดที่เชื่อมต่อกับจุดปลายสงบบนเซิร์ฟเวอร์ของคุณ


ฉันใช้ jQuery และ mootools และจาวาสคริปต์ทั่วไปอย่างหนักในโครงการของฉัน backbone.js จะช่วยฉันได้อย่างไรและจุดประสงค์ของ Restful.Sorry คืออะไรถ้าคำถามของฉันไม่เหมาะสม
sushil bharwani

1
jQuery เป็นส่วนใหญ่สำหรับ DOM Manipulation ที่ Backbone ถูกใช้อย่างหนักเป็นกรอบงานที่ขับเคลื่อนด้วยเหตุการณ์รวมทั้งใช้สำหรับการสร้างแบบจำลองข้อมูล
RobertPitt

14

JQuery และ Mootools เป็นเพียงกล่องเครื่องมือที่มีเครื่องมือมากมายในโครงการของคุณ Backbone ทำหน้าที่เหมือนสถาปัตยกรรมหรือกระดูกสันหลังสำหรับโครงการของคุณซึ่งคุณสามารถสร้างแอปพลิเคชันโดยใช้ JQuery หรือ Mootools


ใช่จริง ๆ แล้วมันง่ายที่จะสมมติว่าชื่อเป็นเพียงชื่อตัวอย่างเช่น 'jquery' น่าจะหมายถึง 'ข้อความค้นหาจาวาสคริปต์' ซึ่งจริงๆแล้วไม่ได้บ่งบอกถึงตัวเองมากนัก แต่ในกรณีนี้ค่อนข้างแท้จริงหมายถึงกระดูกสันหลัง :)
msanjay

11

นี่เป็นวิดีโอเกริ่นนำที่ดีงาม: http://vimeo.com/22685608

หากคุณกำลังมองหาข้อมูลเพิ่มเติมเกี่ยวกับ Rails และ Backbone Thoughtbot มีหนังสือดี ๆ เล่มนี้ (ไม่ฟรี): https : // workshops. Thoughtbot.com/backbone-js-on-rails


11

ฉันต้องยอมรับว่า "ข้อดี" ทั้งหมดของ MVC ไม่เคยทำให้งานของฉันง่ายขึ้นเร็วขึ้นหรือดีขึ้นกว่านี้ มันทำให้ประสบการณ์การรหัสทั้งหมดเป็นนามธรรมและเสียเวลามากขึ้น การบำรุงรักษาเป็นฝันร้ายเมื่อพยายามดีบักความคิดของคนอื่นเกี่ยวกับความหมายของการแยก ไม่ทราบว่ามีกี่คนที่เคยพยายามอัปเดตไซต์ FLEX ที่ใช้ Cairngorm เป็นโมเดล MVC แต่สิ่งที่ควรใช้เวลา 30 วินาทีในการอัปเดตมักใช้เวลา 2 ชั่วโมง (การค้นหา / ติดตาม / การดีบักเพื่อค้นหาเหตุการณ์เดียว ) MVC เคยเป็นและยังคงเป็นประโยชน์สำหรับฉันที่คุณสามารถทำได้


2
สุจริตกรอบโครงสร้างใด ๆ สามารถทำให้เสียหายและพิการโดยโปรแกรมเมอร์ไม่รู้หรือโปรแกรมเมอร์ที่เพียงแค่ไม่ให้ความสนใจ ฉันเคยทำงานในไซต์ CodeIgniter ซึ่งควรจะตรงไปตรงมาและง่ายต่อการสร้าง แต่คนงี่เง่าที่ฉันทำงานด้วยเคยคุ้นเคยกับการทำสิ่งต่าง ๆ ในยุค 90 จนเขาเปลี่ยนจากวิธี OOP ที่สะอาดไปเป็นวิธีดำเนินการที่ผิดรูปภายใน OOP
Patrick

9
ฉันเคยเห็นใครบางคนเขียนเว็บไซต์ตั้งแต่เริ่มต้นและเขียนได้อย่างสวยงามโดยไม่ต้องใช้เฟรมเวิร์กใด ๆ มีอยู่ครั้งหนึ่งที่สิ่งนี้กระทำโดยโปรแกรมเมอร์ PHP ที่ค่อนข้างใหม่ / สีเขียว เขาเพิ่งจะมีจิตใจที่มีเหตุผลมากซึ่งคิดหาวิธีที่จะทำให้สิ่งต่าง ๆ เรียบเนียน การใช้กรอบที่ดีจะทำให้คุณได้รับจนถึง ในขณะที่การใช้การเขียนโปรแกรมที่ยอดเยี่ยมจะนำคุณไปสู่อนาคตที่สดใสในอนาคต
Patrick

2
@ user1415445: สิ่งที่คุณพูดเป็นหลักหมายความว่าการมีคลาสเดียวที่จัดการตรรกะข้อมูลการแสดงผลตรรกะและการสื่อสารระหว่างวิดเจ็ตเลเยอร์การนำเสนอและการจัดเก็บข้อมูล / รหัสเรียกคืนนั้นง่ายต่อการบำรุงรักษามากกว่าการจัดการแต่ละเรื่อง / วัตถุ ซึ่งยากที่จะเชื่อ ถ้าคุณสามารถแสดงให้เห็นถึงแอปที่ไม่น่ารำคาญเขียนสองครั้งครั้งกับ MVC และครั้งเดียวโดยไม่ว่ารุ่นที่ไม่ใช่ MVC คือง่ายต่อการรักษา ฯลฯ
เบห์รัง Saeedzadeh

1
แอปพลิเคชันใด ๆ ที่เกินความจำเป็นต้องมีรูปแบบและ MVC เป็นรูปแบบที่ยอดเยี่ยมเมื่อคุณจัดการกับการนำเสนอข้อมูล ดูเหมือนคุณจะมีประสบการณ์ที่ไม่ดี แต่นั่นไม่ใช่ความผิดของรูปแบบ
superluminary

เอกสารจะเป็นศิลาโรเซตต้าที่หายไปเสมอไม่ว่าจะใช้รูปแบบ & การปฏิบัติใด ๆ เพราะสิ่งเหล่านั้นเปลี่ยนแปลงตลอดเวลา ความงามของลวดลายเช่น MVC คือเมื่อคุณเข้าใจระบบประปาคุณไม่ต้องเสียเวลาเขียนระบบประปาทุกครั้งที่คุณเพิ่มคุณสมบัติใหม่หรืออัปเดตเก่า ใช่จนกว่าคุณจะเข้าใจการประปามันจะเป็นการออกกำลังกายที่ไร้ประโยชน์ วิธีเดียวที่จะทำให้แน่ใจว่ามีความเข้าใจที่เพียงพอเกี่ยวกับ devs ที่ไม่รู้จักในอนาคตนั้นเป็นไปตามมาตรฐานที่สมเหตุสมผลและเอกสารดี การบำรุงรักษาและการทำความเข้าใจกับความยุ่งเหยิงของใครบางคนนั้นไม่เร็วหรือง่ายกว่า ..
JoeBrockhaus


3

backbone.js เป็นModel-View-Controller (MVC) พร้อม JavaScript แต่Extjsดีกว่า backbone สำหรับ MVC Pattern โดยจาวาสคริปต์

ด้วยกระดูกสันหลังคุณจะมีอิสระในการทำเกือบทุกอย่างที่คุณต้องการ แทนที่จะพยายามแยกผ่าน API และปรับแต่งฉันจะใช้ Backbonejs เพราะมันใช้งานง่ายและสะดวก อีกครั้งมันเป็นเรื่องยากที่จะพูดในสิ่งที่คุณต้องการจากสองคนนั้นคือห้องสมุดอีกองค์ประกอบหนึ่ง


3

Backbone ถูกสร้างโดย Jeremy Ashkenas ซึ่งเป็นผู้เขียน CoffeeScript ในฐานะที่เป็นแอพพลิเคชั่นที่มีจาวาสคริปต์หนักสิ่งที่เรารู้ในขณะนี้คือ Backbone รับผิดชอบในการจัดโครงสร้างแอปพลิเคชันให้เป็นรหัสฐานที่สอดคล้องกัน Underscore.js ซึ่งเป็นเพียงการพึ่งพาของแบ็คโบนเท่านั้นยังเป็นส่วนหนึ่งของแอปพลิเคชัน DocumentCloud

Backbone ช่วยให้นักพัฒนาสามารถจัดการรูปแบบข้อมูลในแอปพลิเคชันเว็บฝั่งไคลเอ็นต์ของพวกเขาด้วยระเบียบวินัยและโครงสร้างมากเท่าที่คุณจะได้รับในตรรกะแอปพลิเคชันฝั่งเซิร์ฟเวอร์แบบดั้งเดิม

ประโยชน์เพิ่มเติมของการใช้ Backbone.js

  1. ดู Backbone ในฐานะไลบรารีไม่ใช่เป็นเฟรมเวิร์ก
  2. ขณะนี้ Javascript ได้รับการจัดระเบียบในรูปแบบที่มีรูปแบบ(MVVM)
  3. ชุมชนผู้ใช้ขนาดใหญ่

2

นอกจากนี้ยังเพิ่มการกำหนดเส้นทางโดยใช้ตัวควบคุมและมุมมองด้วย KVO คุณจะสามารถพัฒนาแอปพลิเคชัน "AJAXy" ได้

เห็นว่าเป็น Sproutcore หรือ Cappuccino framework ที่มีน้ำหนักเบา


1

เป็นรูปแบบการออกแบบ MVC ด้านลูกค้าเชื่อฉัน .. มันจะช่วยให้คุณประหยัดรหัสตันไม่ต้องพูดถึงรหัสที่ชัดเจนและชัดเจนมากขึ้นง่ายต่อการรักษารหัส อาจจะยุ่งยากเล็กน้อยในตอนแรก แต่เชื่อว่าฉันเป็นห้องสมุดที่ยอดเยี่ยม


0

คำตอบที่ดีมากมายแล้ว Backbone js ช่วยในการจัดระเบียบโค้ด การเปลี่ยนรุ่น / คอลเลกชันจะดูแลมุมมองการแสดงผลอัตโนมัติซึ่งจะช่วยลดค่าใช้จ่ายในการพัฒนาจำนวนมาก

แม้ว่ามันจะให้ความยืดหยุ่นสูงสุดสำหรับการพัฒนานักพัฒนาควรระมัดระวังในการทำลายโมเดลและลบมุมมองอย่างเหมาะสม มิฉะนั้นอาจมีหน่วยความจำรั่วในแอปพลิเคชัน


-3

เว็บแอปพลิเคชันที่เกี่ยวข้องกับการโต้ตอบกับผู้ใช้จำนวนมากกับคำขอ AJAX จำนวนมากซึ่งต้องเปลี่ยนเป็นครั้งคราวและทำงานแบบเรียลไทม์ (เช่น Facebook หรือ StackOverflow) ควรใช้เฟรมเวิร์ก MVC เช่น Backbone.js มันเป็นวิธีที่ดีที่สุดในการสร้างรหัสที่ดี

หากแอปพลิเคชั่นมีขนาดเล็ก แต่ Backbone.js นั้นเกินความเป็นจริงโดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ครั้งแรก

Backbone จะให้ MVC ฝั่งไคลเอ็นต์และข้อดีทั้งหมดที่กล่าวมานี้


5
"ต้อง" ใช้กระดูกสันหลังหรือไม่ ฉันไม่เห็น stackoverflow หรือ facebook สองตัวอย่างของคุณโดยใช้แบ็คโบนหรือขีดล่างเลย คุณมีการอ้างอิงสำหรับการอ้างสิทธิ์นั้นหรือไม่?
David Meister

แน่นอนว่ามีห้องสมุด MV * อื่น ๆ อีกมากมาย Backbone เป็นหนึ่งในนั้น โดยทั่วไปแล้ว MVC ช่วยให้สิ่งต่าง ๆ เป็นระเบียบเรียบร้อยเมื่อพัฒนาโค้ดขนาดใหญ่
superluminary
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.