มี JavaScript MVC (micro-) framework หรือไม่? [ปิด]


133

มีเฟรมเวิร์กJavaScript MVC (micro-) ฝั่งไคลเอ็นต์หรือไม่

ฉันมีรูปแบบ HTML ที่ค่อนข้างซับซ้อนและจะได้รับประโยชน์จากรูปแบบ MVC

ฉันคิดว่าทางออกที่ดีจะให้สิ่งต่อไปนี้:

  • โมเดลและมุมมองอัปเดตคอนโทรลเลอร์เมื่อค่าเปลี่ยนแปลง (รูปแบบผู้สังเกตการณ์)
  • เติมข้อมูลโมเดลจากข้อมูลฟอร์มเมื่อเพจโหลด
  • เติมแบบฟอร์มจากโมเดลเมื่อโมเดลเปลี่ยนแปลง

Ajax, ดาวหาง, JSONPและแจ๊สทั้งหมดนั้นเป็นสิ่งที่เกินความจริง


2
ฉันคิดผิดหรือนี่เป็นเพียงความคิดที่ไม่ดี (หรืออาจเป็นเฟรมเวิร์กที่สอดคล้องกับ Buzzword)

2
ฉันเริ่มทำงานบางอย่างเมื่อไม่นานมานี้เพราะฉันมีความรู้สึกแบบเดียวกับคุณ มันน้อยที่สุดเท่าที่จะทำได้ AMD และยังไม่ได้เปิดใช้งานเท่าที่จะทำได้ นั่นหมายความว่าไม่มี jQuery เป็นต้นฉันรู้ว่าตอนนี้ปิดไปแล้ว แต่ฉันคิดว่านี่อาจเป็นสิ่งที่คุณกำลังมองหา: github.com/Wolfy87/tarmac - ฉันไม่ได้ทำอะไรมากนักเมื่อเร็ว ๆ นี้เพราะฉันคิดว่าฉัน จะเป็นผู้ใช้เพียงคนเดียว
Olical


ลองดูTodoMVCซึ่งเปรียบเทียบ (เกือบ) เฟรมเวิร์ก JavaScript ที่มีอยู่ทั้งหมดโดยใช้แอพ TODO ง่ายๆ
koppor

คำตอบ:


71

Backbone เป็นเฟรมเวิร์กน้ำหนักเบาที่ยอดเยี่ยม ลองดู: http://backbonejs.org/


2
ฉันดีใจมากที่ได้พบ Backbone
Aaron Greenlee

ฉันเห็นด้วยหนึ่งในการตรวจสอบแน่นอน!
Ivanhoe

วิธีใช้ Backbone ในวิธี MVC?
IsmailS

1
@TristanJuricek มีทางเลือกให้ peepcode ฟรีหรือไม่?
แมตต์

ข้าม Backbone และไปทางขวาสำหรับ Spine มีการใช้ MVC เชิงตรรกะมากขึ้น
Chris Jaynes

33

JavaScriptMVCเป็นโซลูชันที่ยอดเยี่ยม ทุกอย่างเป็นแนวทางของปลั๊กอินช่วยให้คุณสามารถเลือกเฉพาะคุณสมบัติที่คุณต้องการได้ ตั้งแต่ 2.0 ขึ้นอยู่กับ jQuery

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

อย่างไรก็ตาม JavaScriptMVC เป็นเพียงไลบรารี JavaScriptMVC สำหรับวัตถุประสงค์ทั่วไปที่ดีที่สุดเนื่องจากตัวควบคุมที่ใช้การมอบหมายเหตุการณ์ที่มีประสิทธิภาพ

การมอบหมายงานช่วยให้คุณไม่ต้องแนบตัวจัดการเหตุการณ์และเพียงแค่สร้างกฎสำหรับเพจของคุณ

สุดท้าย JMVC เป็นมากกว่าสถาปัตยกรรม MVC มีทุกส่วนของวงจรการพัฒนาครอบคลุมด้วย:

  • เครื่องสร้างรหัส
  • การทดสอบรวมซีลีเนียมและ Env.js
  • Documentation Engine
  • Concat อัตโนมัติ + บีบอัด
  • การตรวจจับและการรายงานข้อผิดพลาด

1
+1 สำหรับ JavascriptMVC - ตอนนี้ฉันใช้มันกับแอพบางตัวแล้วและมันก็ค่อนข้างดี ข้ามตัวอย่างการสร้างโค้ดบนเว็บไซต์ ฉันคิดว่าสิ่งเหล่านี้มีไว้เพื่อปลอบแฟนบอยของ Rails :) เริ่มต้นด้วยโมเดลอ็อบเจ็กต์ JQueryMX พื้นฐานและสร้างคอนโทรลเลอร์
Chris Jaynes

1
ตั้งแต่ฉันแสดงความคิดเห็นนี้ฉันได้เปลี่ยนไปใช้ Require and Spine ท้ายที่สุดแล้วมีขนาดเล็กกว่าหรูหรากว่าและมีความเป็น 'Enterprise' น้อยกว่า JMVC JMVC เป็นสิ่งที่ดีสำหรับทีมนักพัฒนา Java ของเราในการปรับแต่ง JS แต่มันก็ไม่เกิดขึ้นเมื่อคุณเริ่มเข้าใจ JS ได้ดีขึ้น ...
Chris Jaynes

ส่วน MVC ของ JMVC ตอนนี้can.js
PHearst

21

Spineมี API คล้ายกับ Backbone แต่มีขนาดเล็กกว่ามาก มันมีลักษณะการถ่ายทอดทางพันธุกรรม


2
นอกจากนี้ยังเขียนด้วย CoffeeScript และใช้สไตล์การเรียนของ CoffeeScript ไม่ใช่ว่าจะเป็นชัยชนะที่ยิ่งใหญ่ แต่ก็เป็นเรื่องที่ดี
เนิร์ดจ่าย

1
ฉันคิดว่านั่นเป็นเหตุผลว่าทำไมมันถึงเล็กกว่ากระดูกสันหลัง? รหัส Coffeescript มีขนาดกะทัดรัดกว่า ...
Brenden

ฉันรักกระดูกสันหลัง ใช้กับ RequireJS เพื่อความยอดเยี่ยมอย่างแท้จริง อย่าปล่อยให้ความจริงที่ว่า CoffeeScript ทำให้คุณตกใจเช่นกันมันก็ใช้ได้ดีกับ JS ปกติเช่นกัน ...
Chris Jaynes

การสนับสนุนเบราว์เซอร์คือ IE> = 9 ดังนั้นตรวจสอบว่าตรงกับโปรไฟล์ของผู้เยี่ยมชมของคุณ
Richard

20

AngularJS ทำงานร่วมกับ jQuery ได้ดีและจะช่วยคุณได้มากกับโครงสร้าง MVC และการแยกข้อกังวลอย่างเข้มงวด

รวมสภาพแวดล้อมการทดสอบและ Dependency Injection ...

ตรวจสอบได้ที่http://angularjs.org


Angularjs ดีที่สุดในช่วงปลายปี 2013 .... ฉันคิดว่า ....
Bao Qiang

15
เชิงมุมไม่ใช่กรอบขนาดเล็ก: /
iConnor

1
เห็นด้วย Angular ไม่ใช่ micro-framework
Vojta

2
ใช่นอกจากนี้เส้นโค้งการเรียนรู้ยังไม่ได้สัดส่วนซึ่งเป็นประโยชน์เมื่อเทียบกับกรอบงานอื่น ๆ
vsync

4
เชิงมุมเป็นสิ่งที่ตรงกันข้ามกับไมโครเฟรมเวิร์ก มันเป็นสัตว์ร้าย
hasen


14

ฉันคิดว่าสิ่งนี้ดูเหมือนสิ่งที่คุณควรตรวจสอบ: http://knockoutjs.com/

(ในฐานะโปรแกรมเมอร์ silverlight / wpf นี่คือไลบรารีที่ทำให้ฉันเริ่มเรียนรู้ javascript ได้ในที่สุดมันขึ้นอยู่กับรูปแบบ Model-View-View-Model (MVVM) สำหรับฉันตอนนี้ดูเหมือนจะเป็นทางเลือกที่ดี!)


ในฐานะโปรแกรมเมอร์ silverlight / wpf ฉันประเมินสิ่งที่น่าพิศวงกระดูกสันหลังและอีกสองสามคน ในตอนท้ายของวันฉันเปลี่ยนไปใช้ Angular มีการผูกมัดและอื่น ๆ อีกมากมาย
jonperl


8

Ember.js

นี่คือคุณสมบัติสามประการที่ทำให้ Ember สนุกกับการใช้:

  1. การผูก
  2. คุณสมบัติที่คำนวณ
  3. อัปเดตเทมเพลตอัตโนมัติ

การผูก

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

นี่คือวิธีที่คุณสร้างการเชื่อมโยงระหว่างสองวัตถุ:

MyApp.president = Ember.Object.create({
  name: "Barack Obama"
});

MyApp.country = Ember.Object.create({
  // Ending a property with 'Binding' tells Ember to
  // create a binding to the presidentName property.
  presidentNameBinding: 'MyApp.president.name'
});

MyApp.country.get('presidentName');
// "Barack Obama"

การเชื่อมโยงช่วยให้คุณสามารถออกแบบแอปพลิเคชันของคุณโดยใช้รูปแบบ MVC (Model-View-Controller) จากนั้นพักผ่อนได้อย่างสบายใจเพราะข้อมูลจะไหลจากเลเยอร์ไปยังเลเยอร์อย่างถูกต้องเสมอ

คุณสมบัติที่คำนวณ

คุณสมบัติที่คำนวณช่วยให้คุณปฏิบัติกับฟังก์ชันเช่นคุณสมบัติ คุณสมบัติที่คำนวณมีประโยชน์เนื่องจากสามารถทำงานกับการเชื่อมโยงได้เช่นเดียวกับคุณสมบัติอื่น ๆ

อัปเดตเทมเพลตอัตโนมัติ

Ember ใช้ Handlebars ซึ่งเป็นไลบรารีเทมเพลตเชิงความหมาย ในการนำข้อมูลจากแอปพลิเคชัน JavaScript ของคุณและใส่ลงใน DOM ให้สร้างแท็กและใส่ลงใน HTML ของคุณทุกที่ที่คุณต้องการให้ค่าปรากฏ:

<script type="text/x-handlebars">
  The President of the United States is {{MyApp.president.fullName}}.
</script>

2
ถ่านเป็นประโยชน์ที่จะใช้เหนือกระดูกสันหลัง แต่อย่างใด .... หากข้อมูลจำเพาะไม่ชัดเจนในระยะเริ่มต้น ..
Bijendra

4
ฉันชอบ emberJS แต่มันไม่ใช่"micro"มันใหญ่มากเพราะมันเป็นเฟรมเวิร์กที่แบน
iConnor

1
ไม่ควรใช้ Ember และ microframework ในประโยคเดียวกัน
T_Conroy

8

Stapes.js

การเปิดเผยข้อมูลทั้งหมด: ฉันเป็นผู้เขียนห้องสมุดนี้ :)

หากคุณกำลังมองหาสิ่งที่เล็กมาก ๆ (1.5kb minified / gzipped) ลองดูสิและบอกฉันว่าคุณชอบมันไหม


ดูดีตั้งแต่แรกเห็น! ฉันชอบที่คุณให้ความสำคัญกับการสืบทอดต้นแบบ (ไม่มีคลาสจำลองและไม่มีnewตัวดำเนินการที่สับสน) สิ่งที่ดูเหมือนไม่จำเป็นเป็นอีกหนึ่งและeach mapฉันมีพวกเขาในUnderscore.jsและjQuery
feklee

7

หากความต้องการของคุณเป็นจริงง่ายๆคุณสามารถเขียนง่ายของคุณเอง MVC เช่นอเล็กซ์ Netkachovได้

ตัวอย่างของเขาสร้างขึ้นบน dojo (หมายเหตุ: มันใช้ไม่ได้สำหรับฉันในเพจของเขาเนื่องจากไฟล์ dojo.js หายไป) แต่คุณสามารถทำตามรูปแบบใน Javascript ธรรมดา


4

มันอาจจะ overkill สำหรับสิ่งที่คุณต้องการ แต่SproutCoreเป็นกรอบ MVC และมันก็ไม่ได้ดูใด ๆ หนามากกว่าJavaScriptMVCหรือ TrimPath ของสนธิ

แต่น่าเสียดายที่ไม่มีของเหล่านี้ดูเหมือนจะถูกสร้างขึ้นบนหลักการของการเพิ่มประสิทธิภาพของความก้าวหน้า


1
ส่วนประกอบ MVC หลักของ JavaScriptMVC มีขนาดใหญ่กว่า gzipped ของ Backbone ประมาณ 1k (ในขณะที่มีคุณสมบัติอื่น ๆ อีกมากมาย) และ JMVC สามารถสร้างแอพที่ปรับปรุงขั้นสูงได้อย่างเต็มที่ คุณแค่ทิ้งเลเยอร์โมเดล
Justin Meyer

3

เฟรมเวิร์ก ActionScript MVC ยอดนิยมPureMVCถูกย้ายไปยัง JavaScript เมื่อเร็ว ๆ นี้ ฉันยังไม่มีโอกาสได้ลองใช้ แต่ฉันมั่นใจว่ามันดี


ฉันชอบมันสำหรับการดิ้น เรียบง่ายและทรงพลัง
Glenn

3

โปรดเช็คเอาท์jQuery-Claypool

jquery-claypool เป็นเฟรมเวิร์ก mvc ขนาดเล็กรวดเร็วรางรถไฟที่สร้างขึ้นจาก jquery จากประสบการณ์ของฉันกับ django รางสปริง ฯลฯ น้ำหนักเบามากและทำงานได้ทั้งบนไคลเอนต์และในสภาพแวดล้อมเซิร์ฟเวอร์

มันมีกรอบการกำหนดเส้นทางสำหรับ mvc ที่สะอาดการบันทึกหมวดหมู่ตัวกรอง (aop) การสร้างตัวควบคุมแบบขี้เกียจการผกผันการควบคุมการกำหนดค่าตามแบบแผนและการออกแบบไม่มากนัก

มันไม่ได้ทำอะไรที่ jquery ทำอยู่แล้วรู้สึกเหมือน jquery และทำงานได้เหมือนกรอบที่ดีควร: เพียงแค่

jquery-claypool

หวังว่าคุณจะลองดู


คุณเห็น Claypool เกี่ยวข้องกับ Backbone อย่างไร?
Pepijn


2

หากคุณต้องการควบคุมสิ่งต่างๆให้อยู่ภายใต้การควบคุมและค่อนข้างง่ายคุณอาจไม่จำเป็นต้องมีเฟรมเวิร์ก แต่ใช้รูปแบบ mvc ของคุณเอง เพียงตรวจสอบบทความนี้: Model-View-Controller (MVC) ด้วย JavaScriptโดย Alex Netkachov เมื่อปี 2549


2

นี่คือรายการของ JavaScript Framework แบบโอเพนซอร์สทั้งหมดที่มนุษยชาติรู้จัก

http://getopensource.info/explore/javascript/framework/

หรือเฉพาะเฟรมเวิร์ก MVC

http://getopensource.info/explore/javascript/mvc/

การเปิดเผยข้อมูล: ฉันเป็นผู้พัฒนาเว็บไซต์นี้


2

ลองคิตตี้ มีขนาดเพียง 1.4KB และการพึ่งพาเพียงอย่างเดียวคือ EJS


2

อัปเดต 2016: Sammy.js ดูเหมือนจะถูกละทิ้ง

ลองดูที่Sammy.js

ข้อความจากเว็บไซต์:

เว็บเฟรมขนาดเล็กพร้อมชั้นเรียน

  • แกนกลางของSMALL Sammy มีการบีบอัดเพียง 16K และบีบอัดและ gzipped 5.2K
  • MODULAR Sammy สร้างขึ้นจากระบบปลั๊กอินและอะแดปเตอร์ ใส่รหัสที่คุณต้องการเท่านั้น นอกจากนี้ยังง่ายต่อการแยกโค้ดของคุณเองเป็นปลั๊กอินที่ใช้ซ้ำได้
  • CLEAN API ทั้งหมดได้รับการออกแบบมาให้เข้าใจง่ายและอ่านง่าย แซมมี่พยายามส่งเสริมการห่อหุ้มและการออกแบบแอปพลิเคชันที่ดี
  • สนุกอะไรคือจุดที่แท้จริงของการพัฒนาถ้ามันไม่สนุก แซมมี่พยายามทำตามแนวทาง MATZ เหมาะสำหรับความสุขของนักพัฒนา

ช่วยขยายความด้วย MATZ คืออะไร?
kstep

Yukihiro“ Matz” Matsumoto ผู้สร้างทับทิมมักกล่าวว่าเขา“ พยายามทำให้ทับทิมเป็นธรรมชาติไม่ใช่เรียบง่าย” ในแบบที่สะท้อนชีวิต ดังนั้นซอฟต์แวร์ควรให้ความรู้สึกเป็นธรรมชาติสำหรับผู้ใช้ นี่หมายถึงวิธี MATZ
Bijan


1

CorMVC เข้าใจง่ายและเริ่มต้นด้วย jquery ตามและไม่ขึ้นอยู่กับเทคโนโลยีเซิร์ฟเวอร์ใด ๆ


1

ผมได้พัฒนากรอบ Javascript MVC ง่ายมากเรียกว่าMCV มันไม่ได้ทำตามที่คุณขออย่างแน่นอน แต่สามารถขยายได้อย่างง่ายดายด้วยตัวช่วย อย่างไรก็ตามมันเป็นไมโครแน่นอน (บรรจุ 1,9kb)

มันใช้งานได้เหมือน Jamal มากหรือน้อย แต่ฉันตัดสินใจที่จะม้วนของตัวเองด้วยเหตุผลสองประการ:

  • ลบการพึ่งพา jQuery (แม้ว่าฉันจะใช้ร่วมกับ jQuery เกือบตลอดเวลา)
  • ทำให้ขยายได้ด้วยตัวช่วย สิ่งเหล่านี้คล้ายคลึงกับพฤติกรรมส่วนประกอบและตัวช่วยของ CakePHP


1

ฉันเพิ่มคะแนน AngularJS (การเปิดเผยแบบเต็มฉันมีส่วนร่วมในวิธีที่ จำกัด ด้วยความพยายามในการพัฒนาเชิงมุม) และรู้สึกตื่นเต้นมากกับมัน ฉันทำการเปรียบเทียบแบบเคียงข้างกันโดยใช้คุณลักษณะหนึ่งสำหรับโครงการภายใน (ขออภัยไม่มีการลงชื่อเพื่อแชร์) และนำไปใช้ทั้งใน AngularJS และ Backbone มันเป็นการออกกำลังกายที่ยอดเยี่ยมและในท้ายที่สุดฉันก็เอนเอียงไปทาง Angular มาก นักพัฒนาหลักเก่งมากในการตอบคำถามและพวกเขาทำได้ดีมากด้วยการเชื่อมโยงฐานข้อมูลในตัวการทดสอบหน่วย / e2e และเอกสารประกอบ มันยังอยู่ในรุ่นเบต้าพร้อมกับ 1.0 ที่จะออกมาในอนาคตอันใกล้ เบต้ามีความเสถียรมาก

มีการปรับเปลี่ยนกระบวนทัศน์เล็กน้อยและใช้วิธีการที่ค่อนข้างแตกต่างจากส่วนใหญ่ การรวมปลั๊กอิน jquery ที่คุณชื่นชอบต้องใช้ความพยายามเล็กน้อย แต่ทำได้และทำได้สำเร็จแล้ว (angular-Contrib on github)

ฉันจะบอกว่า (และนี่เป็นปัญหาสำหรับเฟรมเวิร์ก js เป็นศูนย์กลางส่วนใหญ่) อย่าลืมตรวจสอบวิธีทำให้เนื้อหาของคุณเป็นมิตรกับ SEO (ถ้ามันสำคัญสำหรับคุณ) นับตั้งแต่เข้าร่วมชุมชนเชิงมุมในเดือนมิถุนายนฉันสังเกตเห็นความสนใจเพิ่มขึ้นและมีคนจำนวนมากโพสต์บอกว่าพวกเขาดู Backbone และคนอื่น ๆ แต่ชอบสิ่งที่พวกเขาเห็นใน Angular





0

มีเฟรมเวิร์ก JavaScript การผูกคีย์ - ค่าที่เรียกว่า "Coherent" ซึ่งได้รับแรงบันดาลใจจาก Cocoa Bindings ของ Apple กรอบการทำงานที่ได้รับการซื้อโดยแอปเปิ้ล แต่ยังคงมีชุดเก่าที่http://github.com/trek/coherentjs/tree/master




0

Can.jsมีทุกสิ่งที่คุณต้องการและมีน้ำหนักเพียง 8 KB ใช้บิตที่ดีที่สุดจาก JavaScriptMVC และกลั่นออกมาเป็นเฟรมเวิร์กขนาดเล็ก แต่เป็นหนึ่งเดียวกับผู้สังเกตการณ์วิดเจ็ตการผูกผลงาน เข้ากันได้กับเฟรมเวิร์กหลัก ๆ ( jQuery , Dojo Toolkit , MooToolsและอื่น ๆ ) เอกสารเป็นเลิศและผู้เขียนตอบสนอง มันคุ้มค่าที่จะดู

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