ฉันผิดพลาดตรงไหนเกี่ยวกับโครงการของฉันและ Javascript Frameworks เหล่านี้


107

ก่อนอื่นสิ่งที่สำคัญที่สุดของโครงการที่ฉันต้องการสร้างคือเครื่องมือวิกิที่ใช้เป็นเว็บแอปหน้าเดียว ฉันวางแผนที่จะมีชุดคุณสมบัติที่พร้อมใช้งานจากการเดินทางพร้อมกับคุณสมบัติมากมายที่เพิ่มเข้ามาตามท้องถนน

คุณสมบัติพื้นฐาน

  • การสร้างเพจ (สร้างทั้งบทความวิกิและกระดานสนทนาสำหรับบทความนั้น)
  • มาร์กอัปและ WYSIWYG ala markitup
  • การแปลงแบบทันทีระหว่างมาร์กอัป / html / WYSIWYG
  • แถบด้านข้างเพื่อนำทางอย่างรวดเร็ว
  • แถบเครื่องมือด้านบนสำหรับเลือกแก้ไข / ดู

คุณสมบัติขั้นสูง

  • แถบด้านข้างที่กำหนดค่าได้เพื่อนำทางด้วยวิธีการต่างๆ
  • แถบเครื่องมือที่กำหนดค่าได้ (อาจเพิ่มภาษามาร์กอัปที่ต้องการ)
  • แท็ก
  • สิ่งที่ต้องทำที่แก้ไขได้
  • ลากและวางการอัปโหลดไฟล์และไฟล์แนบรูปภาพ

แต่เดิมเอ็นจิ้นจะประกอบด้วยการสร้างเพจพื้นฐานที่สุดมาร์กอัปและการแก้ไขแบบ WYSIWYG และการบันทึก ในที่สุดฉันก็อยากจะขยายเอ็นจิ้นพื้นฐานนี้ด้วยการรองรับการลากและวางรูปภาพการอัปโหลดไฟล์กราฟข้อมูลสดและแถบด้านข้างสำหรับปรับแต่งมุมมอง

ฉันได้ทำการค้นหาอย่างละเอียดพอสมควรสำหรับโครงการที่เหมาะสมซึ่งจะใช้เป็นฐานโครงการของฉัน แต่นอกเหนือจาก TiddlyWiki ดูเหมือนจะไม่มีเครื่องมือวิกิจาวาสคริปต์ที่ดี ฉันยังพิจารณาใช้ Jquery กับเอ็นจินวิกิที่มีอยู่ แต่ฉันเชื่อว่าฉันจะต้องเขียนมันใหม่ในที่สุดอยู่ดี (บวกกับมันน่าตื่นเต้นกว่าที่จะเพิ่มคุณสมบัติที่ฉันต้องการเมื่อฉันไป) ไม่ว่าจะด้วยวิธีใดฉันก็มาถึงการนำสัตว์ร้ายนี้มาใช้กับ javascript library + framework

ฉันรู้ว่าไม่มีใครสามารถเปรียบเทียบกรอบงานเหล่านี้กับกันและกันได้เพราะพวกเขาไม่ใช่แอปเปิ้ลกับแอปเปิ้ล ฉันได้พยายามกำหนดกรอบความคิดเห็น / คำถามเปรียบเทียบกับส่วนที่เทียบเคียงกันของกรอบการทำงานที่เกี่ยวข้อง แต่ฉันก็ยินดีที่จะได้รับการแก้ไข

ไปเลย:

จากการวิจัยและความคิดเห็นของฉันเองฉันได้ จำกัด รายการให้แคบลงไปที่รายการด้านล่าง ฉันตั้งใจทิ้งสิ่งต่างๆเช่น SproutCore, corMVC, YUI และอื่น ๆ ในขณะที่ฉันมีความสามารถ จำกัด คิดว่ารายการด้านล่างน่าจะเหมาะสมกว่า

ตัวเลือกของฉัน


jquery / UI + กระดูกสันหลัง

โดยรวม

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

UI

แม้ว่า jQueryUI หรือ jqueryTools อาจมีการแข่งขัน แต่ก็ดูเหมือนจะไม่ตรงกับความสามารถ UI ของเฟรมเวิร์กอื่น ๆ โดยเฉพาะอย่างยิ่งพวกเขาดูเหมือนจะหนักในเอฟเฟกต์ แต่ขาดการสนับสนุนการแบ่งเลย์เอาต์ที่เหมาะสม

javascriptMVC

โดยรวม

JavascriptMVC สำหรับฉันดูเหมือนว่ามันเป็นส่วนขยาย jquery + MVC (jqueryMX) เป็นหลักพร้อมกับแอปอื่น ๆ สำหรับการจัดทำเอกสาร (documentJS) การทดสอบการทำงาน (funcUnit) และการจัดการโค้ดและการพึ่งพา (ขโมย) นอกเหนือจากประโยชน์ของโมดูลเพิ่มเติมแล้วฉันคิดว่าการอภิปรายเกี่ยวกับฟังก์ชันนั้นเกี่ยวข้องกับกระดูกสันหลังกับ jqueryMX ฉันถูกต้องหรือไม่และมีใครทำงานด้วยหรือเปรียบเทียบทั้งสองอย่างหรือไม่

UI

JavascriptMVC เพิ่มรายการMXUIที่ด้านบนของสิ่งที่มีอยู่สำหรับ Jquery ดังนั้นฉันคิดว่าอย่างน้อยที่สุดมันก็ชนะเล็กน้อยในประเภทนั้น

สิ่งที่น่าพิศวง

โดยรวม

ความคิดและข้อกังวลของฉันเกี่ยวกับเรื่องนี้คล้ายกับความคิดเห็น jquery + backbone ทั้งคู่ดูเหมือนจะนำเสนอคุณสมบัติที่คล้ายกัน แต่เป็นเพียงมุมมองที่แตกต่างกัน ข้อเสียที่อ้างถึงบ่อยครั้งคือตรรกะทางธุรกิจที่น่าพิศวงและการนำเสนอที่แน่นเกินไปกับการผูกข้อมูลและวิธีการผูกนี้สามารถแบ่งย่อยสำหรับการโต้ตอบ UI ที่ซับซ้อน แต่ฉันชอบที่จะได้ยินว่าทำไมจึงไม่เป็นปัญหา

UI

ว่างเปล่าในขณะนี้

Dojo และ ExtJS

โดยรวม

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

UI

Dojo มีไลบรารี dijit UI ExtJS มีคุณสมบัติ UI แต่ไม่ได้อยู่ใน Ext core นี่คือเอกสารและนี่คือการสาธิตของพวกเขา

คาปูชิโน่

โดยรวม

แล้วก็มีคาปูชิโน่ ไม่มี CSS ไม่มี html แต่อาจเป็นเรื่องยากที่จะใช้ไลบรารีจาวาสคริปต์ที่มีอยู่ Objective-J ดูเหมือนจะไม่น่ากลัวโดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่าพวกเขาสามารถเขียนจาวาสคริปต์ธรรมดาได้เช่นกัน การสาธิตเป็นสิ่งที่น่าประทับใจและดูเหมือนจะเข้าใกล้ความต้องการของ UI สำหรับเครื่องมือวิกิ API ที่ใช้โกโก้นั้นมีประโยชน์มากมายสำหรับผู้ที่ไม่คุ้นเคยกับมัน แต่อาจจะคุ้มค่า ฉันเคยได้ยินมาว่าเครื่องมือจัดวางนั้นไม่ใช่เรื่องง่ายที่จะใช้งานได้ แต่เทคโนโลยีที่อายุน้อยและอาจก่อกวนเช่นนี้จะมีข้อบกพร่องบางอย่าง

UI

ว่างเปล่าในขณะนี้

ฉันขอโทษที่เขียนมาก แต่เดี๋ยวก่อนอย่างน้อยก็ไม่ใช่คำถาม ax vs y vs z ที่หวังว่าจะได้คำตอบราคาถูกมากมาย ดังนั้นสิ่งที่คุณคิดว่า? อะไรควรเป็นพื้นฐานสำหรับเดสก์ท็อปของฉันเช่น wiki engine ซึ่งหวังว่าจะกลายเป็นฟีเจอร์ที่สมบูรณ์มากขึ้น (อ่านซับซ้อน) เมื่อเวลาผ่านไป


9
+1 สำหรับคำถามที่มีรายละเอียดอย่างเหลือเชื่อและมีความคิดที่ดี!
Sean Vieira

8
ไม่แน่ใจเกี่ยวกับไทม์ไลน์และทรัพยากรของคุณ แต่เมื่อฉันพยายามตัดสินใจระหว่างเฟรมเวิร์ก / สภาพแวดล้อมที่หลากหลายฉันก็แค่พยายามสร้างต้นแบบอย่างรวดเร็ว แม้ว่าจะเป็นหน้าที่หลักเพียงหนึ่งหรือสองอย่าง แต่ฉันพบว่างานวิจัยและเอกสารทั้งหมดในโลกไม่เคยตรงกับการพยายามสร้างบางสิ่งด้วยเครื่องมือเลย ฉันบอกว่าใช้เวลาหนึ่งวันกับแต่ละวันและดูว่าคุณไปไกลแค่ไหน นั่นจะเป็นตัวบ่งชี้ที่ดีว่าเครื่องมือใดที่เหมาะกับงานและรู้สึกสะดวกสบายที่สุดสำหรับคุณ
Brian Flanagan

1
@Brian Flanagan ย้ายไปหาคำตอบ - แม้ว่า "เมตา"

1
คุณเคยดูtiddlywiki.comหรือไม่ฉันคิดว่านั่นเป็นวิกิที่ประกอบด้วยตัวเองล้วนๆที่ทำใน JavaScript
Bernhard

ใช่ฉันดู tiddlywiki แล้ว ในหลาย ๆ ด้านมันเป็นแรงบันดาลใจสำหรับโครงการนี้ แต่ฉันมีพื้นฐานและทิศทางที่คิดไว้สำหรับโครงการนี้
funkyeah

คำตอบ:


4

ฉันขอแนะนำให้ระบุข้อกำหนด UI เฉพาะสำหรับโครงการของคุณก่อน คุณได้ลองใช้เฟรมเวิร์กใดในการหมุน

โดยส่วนตัวแล้วฉันเข้าสู่การพัฒนา ExtJS เนื่องจากโครงการที่ฉันทำงานนั้นต้องการการปรับแต่งการควบคุม / วิดเจ็ตจำนวนมาก ExtJS มีสิ่งเหล่านี้มากมายจากกล่องและสามารถขยายรวมหรือรวมเข้ากับสิ่งที่ธุรกิจของคุณต้องการได้ตลอดเวลา

ExtJS 4ยังช่วยให้คุณสามารถ "สกิน" UI ของคุณเพื่อปรับแต่งรูปลักษณ์เพิ่มเติมได้อีกด้วย

หากคุณยังใหม่กับ JavaScript และคุ้นเคยกับ Java คุณอาจมองหาโซลูชันฝั่งเซิร์ฟเวอร์เช่นGWT , JSFหรือแม้แต่Vaadin


19

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


6

เป็นความโกรธในปัจจุบัน ( เฟรมเวิร์ก JavaScript แบบเต็มสแต็กที่ติดดาวมากที่สุดใน GitHubและMeteorpediaเป็นเครื่องมือวิกิที่เขียนด้วย Meteor

วิดีโอเปิดตัวจะได้รับคุณติดยาเสพติดโดย 01:28

มันไม่เชื่อเรื่องพระเจ้าที่เกี่ยวกับ UI และได้รับการทดสอบอย่างกว้างขวางกับเงินทุนและFamo.us นอกจากนี้ยังสร้างแอพมือถือจาก codebase เดียวกัน


1
และมีการผสานรวมกับ React แต่สำหรับผู้ที่เข้าร่วม 100% เท่านั้น นอกจากนี้ยังไม่มีปัญหาในการใช้ปลั๊กอิน jquery และไลบรารีการวาดภาพ svg / canvas ที่มีความรู้มากมายเกี่ยวกับ Meteor
imslavko

1

กรอบงานที่คุณเลือกอาจไม่ จำกัด ตัวเลือก UI ของคุณมากเท่าที่คุณจะจินตนาการได้ บทความนี้อองรี Bergius ล่าสุดเกี่ยวกับ decoupling การจัดการเนื้อหาที่แสดงให้เห็นถึงจุดดีกว่าที่ฉันสามารถทำได้ - และบังเอิญเชื่อมโยงไปสู่การใช้ JavaScript บริสุทธิ์ (กรอบอิสระ) มองสวยหวานในสถานที่แก้ไขเนื้อหา


ฉันกำลังขุดตัวแก้ไข aloha สำหรับ WYSIWYG อย่างแน่นอน แน่นอนฉันจะเชื่อมต่อที่ด้านบนของหน้าจอและเพิ่มแท็บเพื่อดู textarea ในมาร์กอัปของบางรูปแบบด้วย ตัวเลือกหลักอื่น ๆ ของฉันจะเป็นรสชาติของบางmarkItUp
funkyeah

1

คุณไม่ได้อยู่คนเดียว!

VanillaJSและ Ampersand .. เป็นตัวอย่างที่ดีของไดรฟ์ที่จริงจังสำหรับ JavaScript แบบแยกส่วนที่ง่ายขึ้น

มีหนังสือเกี่ยวกับเรื่องนี้ด้วยซ้ำ

ความเรียบง่ายถูกขับเคลื่อนโดยคุณสมบัติ es6 ที่ได้รับการจัดอันดับต่ำกว่า: โมดูลและมาตรฐานการใช้งานSystemJS สามารถใช้กับระบบที่ไม่ใช่ es6 ได้

จะเด็ดแค่ไหน!


1

ฉันจะบอกว่าคุณคิดผิดในการเลือกผู้สมัครโดยรวมเนื่องจากคุณไม่ใช้AngularและEmberซึ่งทั้งสองอย่างนี้เหมาะสมกว่ากรอบอื่น ๆ ที่ระบุไว้

โดยรวมแล้วฉันจะบอกว่า Angular.js เป็นเฟรมเวิร์กสำหรับอันนี้

เน้นการกำหนดเส้นทาง

สิ่งที่คุณกำลังพูดถึงส่วนใหญ่ (แถบด้านข้างหลายแถบสำหรับการนำทางแอปหน้าเดียว) คือฟังก์ชันของการกำหนดเส้นทางหรือวิธีที่ส่วนหน้าตีความข้อความในแถบนำทาง URL ของคุณ

ทั้ง Angular.js และ Ember มีเราเตอร์ที่ยอดเยี่ยมที่ช่วยให้คุณทำทุกสิ่งที่ต้องการได้สำเร็จโดยไม่ต้องใช้รหัสเพิ่มเติม

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

โครงสร้างของเว็บไซต์เอง

Angular มีไลบรารีที่น่าทึ่งที่เรียกว่าเราเตอร์ UI ช่วยให้คุณทั้งสร้างการนำทางที่กำหนดเองและตั้งค่าโครงสร้างที่เป็นมิตรกับ SEO ในการเปิดเผยเนื้อหาของคุณ หลายมุมมองจะอนุญาตให้มีแถบเครื่องมือด้านบนเช่นกัน

การสอนเราเตอร์ Ui: http://cacodaemon.de/index.php?id=57

WYSIWYG Editor

Angular สร้างขึ้นจากการผูกแบบสองทางแบบสด (เมื่อคุณเปลี่ยนบางสิ่งบางอย่างมันจะเปลี่ยนไปที่อื่นโดยอัตโนมัติ) ดังนั้นจึงมาพร้อมกับคุณสมบัติมากมายที่ทำงานได้ดีกับตัวแก้ไขประเภทนี้ สิ่งที่ดีบางอย่างได้ถูกสร้างขึ้นมาแล้วและคุณต้องนำไปใช้เท่านั้น

http://textangular.com/

กราฟและสิ่งอื่น ๆ ที่เรียบร้อย

คำสั่งเชิงมุมได้รับการออกแบบมาเพื่อทำสิ่งต่างๆเช่นสร้างส่วนประกอบแผนภูมิที่สามารถใช้ซ้ำได้ ไม่แตกต่างจากวิดเจ็ต Wordpress โดยสิ้นเชิง สิ่งเหล่านี้ได้รับการพัฒนาแล้วและสามารถทิ้งลงในโครงการ Angular ของคุณได้

http://www.sitepoint.com/creating-charting-directives-using-angularjs-d3-js/

เกี่ยวกับ Ember ฉันไม่ค่อยรู้เรื่องนี้มากนักจึงไม่สามารถพูดถึงคุณสมบัติเฉพาะของมันได้


0

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

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

คุณมีคำพูดดีๆที่ทำให้ฉันตัดสินใจได้ที่นี่: https://www.youtube.com/watch?v=qWr7x9wk6_c

และที่นี่คุณมีต้นแบบการสาธิตที่มีองค์ประกอบลากและวางรวมถึง js libs อื่น ๆ ที่เชื่อมต่อ ชอบที่จะได้ยินว่าคุณคิดอย่างไรเกี่ยวกับรหัสของฉันตั้งแต่ฉันทำงานด้านการพัฒนาเว็บมา 1.5 ปี ... ฉันยังเป็นมือใหม่: https://github.com/Drasky-Vanderhoff/marionette-demo/

เกี่ยวกับ Knockout เป็นสิ่งที่ดีมากหากคุณต้องการโต้ตอบกับเนื้อหาที่คุณมีอยู่แล้วและคุณจะไม่เชื่อมต่อกับแบ็กเอนด์ตลอดเวลา ฉันทำงานกับมันเป็นเวลา 6 เดือนและฉันต้องใช้ js libs อื่น ๆ มากมายในการกำหนดเส้นทาง บวกกับฉันทำซ้ำโครงสร้างจำนวนมากที่ Backbone และ JS Frameworks อื่น ๆ มี สิ่งที่ฉันจะพูดก็คือมันจะไม่เข้ามาขวางคุณเลยและเป็นเครื่องมือแทนที่จะเป็นข้อ จำกัด นี่ก็เกือบหนึ่งปีแล้วที่มีบางสิ่งเปลี่ยนแปลงไป

สิ่งหนึ่งถ้าคุณพบ Knockback (Knockout + Backbone) ... หลีกเลี่ยงมันเอกสารประกอบจะไม่ดีเท่าที่ควรและคุณจะต้องใช้เวลามากขึ้นในการเรียนรู้ หากคุณต้องการไปให้สร้างต้นแบบที่รวดเร็วก่อนเพื่อดูว่าเป็นสิ่งที่คุณต้องการหรือไม่


เป็นปีแล้วที่คุณโพสต์สิ่งนี้ ในขณะที่ฉันกำลังมองหาการพัฒนาใหม่ในตอนนี้ Marionette ยังคงเป็นตัวเลือกอันดับต้น ๆ ของคุณสำหรับการพัฒนา Javascript หรือไม่?
AlVaz

ไม่เลยตอนนี้ควรใช้ Angular.js หรือ React.js (คุณสามารถรวมทั้งสองอย่างได้หากต้องการ) หากคุณต้องการใช้แอปทั้งบนมือถือและเวอร์ชันเว็บฉันขอแนะนำให้คุณใช้ React.js เนื่องจาก React Native ใช้สำหรับการสร้างแอปเนทีฟ iOS และ Android ทั้ง React.js และ native มีแนวคิดโครงสร้างและกระบวนทัศน์เดียวกัน (คือเรียนรู้ครั้งเดียวใช้ได้ทุกที่รู้ React.js == React Native ใช่ฉันไม่ได้ใช้ triple เท่ากับ: P)
DraskyVanderhoff

นอกจากนี้ยังมีเว็บคอมโพเนนต์ที่ใช้โพลีเมอร์ซึ่งฉันขอแนะนำอย่างยิ่งให้คุณตรวจสอบหากต้องการทำงานด้วยอาจเป็นเฟรมเวิร์กที่ร้อนแรงที่สุดในปีหน้า สุดท้ายนี้ Meteor เป็นตัวเลือกที่ยอดเยี่ยมหากคุณต้องการซิงค์ข้อมูลแบบเรียลไทม์ 100% / การเชื่อมข้อมูลสามทางโดยเฉพาะอย่างยิ่งเพราะถ้าคุณเขียนตัวตรวจสอบความถูกต้องสำหรับพารามิเตอร์มันจะเรียกใช้ตัวตรวจสอบความถูกต้องเดียวกันทั้งในแบ็กเอนด์และส่วนหน้าหลีกเลี่ยงความจำเป็นในการมี 2 โค้ด ฐานที่เหมือนกัน
DraskyVanderhoff

คำชี้แจงอย่างหนึ่งฉันไม่เคยพูดว่า Marionette เป็นตัวเลือกอันดับต้น ๆ ของฉัน (จริงๆแล้วมันเป็น Angular ในตอนนั้น) สิ่งที่ฉันพูดคือถ้าคุณจะใช้ Backbone.js THEM ให้ใช้ Marionette.js แทน
DraskyVanderhoff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.