2011-04-27 12 views
15

मैंने हाल ही में Backbone.js का उपयोग करना शुरू कर दिया है। मैं वास्तुकला, सुविधाओं के मामले में यह लगभग ठीक है कि मैं क्या जरूरत है ...बैकबोन.जेएस और इसकी एपीआई भ्रम

चाहते ... लेकिन मैं निम्न चेतावनियां पाया:

  • Collection रों लिए get कुछ Model रों के लिए की तुलना में अलग है। कोई set नहीं है। विशेष रूप से गुणों का उपयोग किया जाना चाहिए। मुझे यह असंगत लगता है। कभी-कभी मॉडलों और संग्रहों को भ्रमित करना आसान होता है। क्या इस बात को दूर करने के लिए कुछ भी किया जा सकता है?
  • Model.extend के अंदर प्रारंभिक मानों को असाइन करना हमेशा काम नहीं करता है। उदाहरण के लिए url असाइन करना डिफ़ॉल्ट व्यवहार को ओवरराइड नहीं करेगा। यह केवल set() विधि पर कॉल के माध्यम से प्राप्त किया जा सकता है। फिर से बहुत त्रुटि प्रवण।
  • मुझे अभी भी पता नहीं है कि get/setinitialize() कॉल के अंदर उपयोग करना आवश्यक है या नहीं।
  • मुझे समझ में नहीं आता कि मैं को initialize() के अंदर क्यों नहीं बुला सकता और मुझे इस तरह से बाध्य होने के लिए विशिष्ट फ़ंक्शन नाम सूचीबद्ध करना होगा: _.bindAll(this, firstFunc, secondFunc, ...)। यह बहुत शुष्क नहीं है।

मैं जानना चाहता हूं: उल्लिखित स्थितियों के बारे में सर्वोत्तम अभ्यास क्या हैं? फ्रेमवर्क को और अधिक सुसंगत बनाने के लिए आप क्या करते हैं - कोई बंदर पैचिंग? क्या मैं कुछ भी गलत कर रहा हूं/सम्मेलन के खिलाफ?

मैं किसी भी अच्छे असली दुनिया के उदाहरणों के लिए आभारी रहूंगा। मुझे यह मिला: http://documentcloud.github.com/backbone/docs/todos.html और http://liquidmedia.ca/blog/2011/01/backbone-js-part-1/ और वे किसी भी समस्या का समाधान नहीं करते हैं। वास्तव में वे केवल सरल विचारों और बिल्कुल सीमावर्ती मामलों को प्रस्तुत नहीं करते हैं, इसलिए कुछ भी जटिल हो सकता है।

संपादित करें:

ठीक है, और वहाँ एक और मौलिक लगता है कि मुझे समझ नहीं आता है: var SomeModel = Backbone.Model.extend({ myattribute: myvalue }):

  • मैंने कभी इस तरह विस्तार पर अतिरिक्त गुण दिखाने की अनुमति है?
    • यदि ऐसा है, तो new SomeModel().get("myattribute") पर कॉल क्यों नहीं करते?
  • initialize() के अंदर वास्तव में क्या है? क्या यह मॉडल वर्ग या मॉडल उदाहरण है?

संपादित करें (2):

खैर, मैं इस पाया: http://maccman.github.com/spine/। यह बैकबोन.जेएस 2.0 जैसा दिखता है, एक समान नाम भी साझा करता है :)। अभी तक इसका परीक्षण नहीं किया है, जो एक शो स्टॉपर का थोड़ा सा हो सकता है, क्योंकि लाइब्रेरी हाल ही में हाल ही में है। हालांकि चीजों के दस्तावेज़ों से यह बहुत ही प्रमोशनल लग रहा है। यह मुझे मिली अधिकांश समस्याओं से छुटकारा पाता है, यह एपीआई को सरल बनाता है, यह underscore.js पर निर्भरता से छुटकारा पाता है जो पुस्तकालय के लिए एक अच्छी बात है। मैं यहां अपने और निष्कर्ष पोस्ट करूंगा।

+0

अच्छा सवाल, मुझे भी बैकबोन थोड़ा अजीब मिला। आपको अपने निष्कर्षों को अपने प्रश्न के उत्तर के रूप में जोड़ना चाहिए। – brianpeiris

+0

@brianpeiris I जैसे ही मैं स्थापित करता हूं कि यह वास्तव में प्रयोग योग्य है। अब तक सब ठीक है. रीढ़ की हड्डी वास्तव में अच्छी तरह से सोचा प्रतीत होता है। – julkiewicz

उत्तर

10

ठीक है, मुझे लगता है कि मैं इसे काफी आत्मविश्वास से कह सकता हूं: बैकबोन मर चुका है, लंबे समय तक जीवित रहता है।

स्पाइन वास्तव में बैकबोन का एक कांटा नहीं है। हालांकि यह कुछ डिजाइन निर्णयों से बहुत समान और स्पष्ट रूप से प्रेरित है। यह कहा जा सकता है कि लेखक ने मूल रीढ़ की हड्डी एपीआई जितनी संभव हो उतनी बरकरार रखने की कोशिश की, सब कुछ अनावश्यक या अजीब से छुटकारा पा लिया। मुझे विस्तार करना भी आसान लगता है। परिवर्तनों की सूची में अन्य चीजों के साथ शामिल है:

  • भयभीत Collection एस से छुटकारा पाएं। इसके बजाए "कक्षा विधियों" का उपयोग किया जाता है,
  • जेएस प्रोटोटाइपिकल प्रकृति से अधिकतर प्राप्त करना (यानी get/set आवश्यक है)। गुण सीधे पहुंचे हैं। किसी ईवेंट को ट्रिगर करने के लिए save() पर एक स्पष्ट कॉल आवश्यक है।
  • Views और Controllers अब नए प्रकार के Controllers में विलय कर दिए गए हैं जिसका उद्देश्य डीओएम कार्यक्रमों का जवाब देना और मॉडल घटनाओं से जुड़ना है।
  • नाम :)

मैं उन डिजाइन फैसले सुसंगत और समझदार हैं।

+0

मैं रीढ़ की हड्डी की ओर भी झुका रहा हूं। मैं बैकबोन का उपयोग कर रहा हूं और प्राप्त ('संपत्ति') चीज न केवल कोड में बल्कि टेम्पलेट्स में भी दर्द है। बैकबोन के साथ यह मेरा एकमात्र असली गोमांस है। मेरी इच्छा है कि रीढ़ की एक व्यू क्लास थी। यदि आप तत्व डिज़ाइन पैटर्न को देखते हैं, तो वही है जो व्यू डब्ल्यू/संग्रह बैकबोन में है। – mgutz

+0

@mgutz वैसे यह एक डिजाइन पैटर्न हो सकता है, हालांकि मुझे हमेशा संग्रह अनावश्यक पाया जाता है। और यह विशेष रूप से दर्दनाक है क्योंकि वे वास्तव में आवश्यक हैं (जिस तरह से यूआरएल डिफ़ॉल्ट रूप से बनाया गया है)। आप रीढ़ की हड्डी में भी संग्रह कर सकते हैं और बैकबोन में संग्रह न होने की तुलना में यह कम लेखन है। – julkiewicz

+0

@julkiewicz रीढ़ की हड्डी मर गई है? आपका जवाब एक वर्ष से अधिक पुराना है ... क्या यह अभी भी सटीक है? –

0

संग्रहों के लिए कोई 'सेट' नहीं है क्योंकि संग्रह सरणी नहीं हैं, वे सेट हैं, जिन्हें संभावित रूप से आदेश दिया जाता है। किसी विशेष स्थिति पर तत्व रखने का एकमात्र समर्थित तरीका संग्रह में जोड़ना और फिर संग्रह को सॉर्ट करना है।

+0

मेरा मतलब यह नहीं था। 'मॉडल' के लिए '() 'का अर्थ है एक विशेषता का मूल्य लौटाएं। संग्रह हो सकते हैं, और गुण भी हो सकते हैं - जैसे '.url' कहें। हालांकि 'प्राप्त() 'आइटम तक पहुंचने के लिए आरक्षित है। मैं व्यक्तिगत रूप से दो अलग-अलग कार्यों को व्यक्तिगत रूप से नामित नहीं करता - यह मेरा मुद्दा है। – julkiewicz

+0

मुझे समझ में आया। लेकिन आपने यह भी कहा "कोई सेट नहीं है।" –

+0

फिर, 'मॉडल के साधनों के लिए' सेट() 'एक विशेषता सेट करें। हालांकि एक संग्रह के लिए मुझे सीधे गुण सेट करना है। यह और भी भ्रमित है क्योंकि गलती से एक मॉडल के लिए ऐसा करना संभव है और इससे उचित ट्रिगर्स को आग लगने में विफल रहता है। – julkiewicz

संबंधित मुद्दे