5

मैं यह पता लगाने की कोशिश कर रहा हूं कि बैकबोन.जेएस मेरे वर्तमान प्रोजेक्ट के लिए सही ढांचा है: विज़ुअलाइज़ेशन ऐप।गैर रीस्टफुल ऐप के साथ Backbone.js? (Backbone.js मेरे वर्तमान प्रोजेक्ट के लिए सही है?)

1) राज्य/रूटिंग:

मैं कई सवाल है?

चूंकि यह आपका सामान्य रीस्टफुल ऐप नहीं है, बल्कि इन चार्टों के लिए विभिन्न चार्ट प्रकारों और सेटिंग्स के साथ विज़ुअलाइजेशन एप्लिकेशन है, मैं यूआरएल में राज्य कैसे बनाए रखूं?

AreaChartModel = Backbone.Model.extend({ 
    defaults: { 
     selectedCountries: [], 
     year: 1970, 
     stacked: false 
    }, 
    initialize: function(){ 
     [...] 
    } 
}); 

मॉडल मैं इन विशेषताओं में से कुछ को क्रमानुसार करना चाहते हैं ताकि मैं विशिष्ट राज्य बुकमार्क कर सकते हैं के लिए एक अद्यतन पर:: मान लीजिए कि मेरी areaChart मॉडल इस तरह चूक की एक संख्या है चलो chartApp.html # ! वर्ष = 1 9 70 & स्टैक्ड = झूठी इत्यादि

और इसके विपरीत, इस स्थिति के साथ ऐप को जोड़ने में, मैं यूआरएल राज्य को "डेपाराम" कैसे कर सकता हूं और मॉडल सेट कर सकता हूं? क्या मैं बैकबोन के आंतरिक रूटिंग का उपयोग कर सकता हूं?

2) नियंत्रक और युग्मन?

ऐसा लगता है कि बैकबोन में एक सुंदर तंग दृश्य-मॉडल युग्मन है? क्या यह वास्तव में मॉडल के लिए मेरा क्षेत्रChartView उदाहरण के लिए बाध्य होना चाहिए?

AreaChartView = Backbone.View.extend({ 
    initialize: function(){ 
     areaChartModel.bind("change:year", this.render); 
    } 
}); 

क्या यह आमतौर पर नियंत्रक की भूमिका नहीं है?

3) निरंतरता: मॉडल बनाम नियंत्रक?

इस परिदृश्य को देखते हुए: enter image description here

"साइडबार" में एक परिवर्तन कार्यों के एक दृश्य को गति प्रदान करना चाहिए:
1) "वर्तमान चयन के लिए नए डेटा लोड किया जाना चाहिए"
2) "के आधार पर इस डेटा, दृश्य दृश्य में तराजू अद्यतन किया जाना चाहिए "
3)" दृश्य दृश्य रेंडर किया जाना चाहिए "

मैं इन कार्यों कहां रखना चाहिए और मैं मॉडल में एक घटना है कि मैं को गति प्रदान जब कैसे बना सकते हैं राज्य स्थिर है? (यानी जब सभी कार्यों को बुलाया गया है और अब दृश्य राज्यों को सेट करने का समय है?)

उत्तर

3

1) मैं बैकबोन.जेएस मूल रूटिंग का उपयोग "पैराम" और "* स्प्लट्स" , read more का उपयोग करके जितना संभव हो सके उपयोग करूंगा। आप बैकबोन.जेएस रूटिंग में अपने सभी प्रश्नों को फिट कर सकते हैं लेकिन मैं व्यक्तिगत रूप से अंतर्ज्ञानी यूआई बटन

उदा। मेरे पास लाइन बार के रूप में डिफ़ॉल्ट होगा और आप इसे यूआरएल से प्रीसेट नहीं कर सकते हैं, लेकिन स्टैक्ड ग्राफ में बदलने के लिए बटन का एक साधारण क्लिक होगा।

मैं शायद कभी भी उपयोग से भटक जाऊंगा? और मेरे यूआरएल में &। मैं इस बिंदु पर बाद में वापस आ सकता हूं क्योंकि यह दिलचस्प है।

2) आपका उदाहरण ठीक है और आपको बस याद रखना होगा बैकबोन.जेएस एमवीसी शब्दावली पारंपरिक एमवीसी से संबंधित नहीं है।

बैकबोन दृश्य अनिवार्य रूप से पारंपरिक एमवीसी में नियंत्रक हैं। बैकबोन नियंत्रक केवल ढांचे के अंदर रूटिंग का एक तरीका हैं। बैकबोनिंग इंजन जो आप बैकबोन.जेएस के साथ उपयोग करते हैं वह पारंपरिक एमवीसी व्यू है।

3) फिर भी

+0

आपके इनपुट के लिए बड़ा धन्यवाद। यह वास्तव में स्पष्ट था: "बैकबोन व्यू अनिवार्य रूप से पारंपरिक एमवीसी में नियंत्रक हैं। बैकबोनिंग इंजन जो आप बैकबोन.जेएस के साथ उपयोग करते हैं वह पारंपरिक एमवीसी व्यू है।" अब मैं सिर्फ # 3 के साथ संघर्ष कर रहा हूं - मॉडल अपडेट होने पर अनुक्रम में आने वाले सभी कार्यों को कहां रखा जाए। – dani

+0

हाय डानी, क्या आपने # 3 को हल करने का प्रबंधन किया था? – papdel

+0

अधिकांश लोग आजकल नियंत्रक की मुख्य कार्यक्षमता के बारे में सोचते हैं क्योंकि सर्वर पक्ष एमवीसी पैकेजों की वजह से एमवीसी को एक अलग प्रतिमान में फिट करने की कोशिश की गई है। चूंकि नियंत्रक हमेशा पूरे दृश्य को फिर से प्रस्तुत करता है, इसलिए सर्वर पर ग्लूइंग घटनाओं और विचारों का कार्य आवश्यक नहीं था। पारंपरिक क्लाइंट साइड एमवीसी में, नियंत्रक घटनाओं का जवाब देने और केवल उन विचारों को अपडेट करने के लिए ज़िम्मेदार है जिनकी आवश्यकता है। हालांकि, एक पृष्ठ के लिए शीर्ष स्तर नियंत्रक की भूमिका के भीतर रूटिंग अच्छी तरह से फिट होती है (इसलिए यह राज्य को बुकमार्क के रूप में सहेज सकती है) –

0

लेखन के बारे में प्रश्न # 3, मैं एक Model और स्लाइडर के लिए एक View पैदा करेगा।

फिर मैं मॉडल पर change ईवेंट की ट्रिगरिंग को उस दृश्य में कुछ फ़ंक्शन में जोड़ता हूं जो ग्राफ़ के दृश्य को अपडेट करता है (जैसे स्केल बदलना)। की तरह कुछ:

var Slider = Backbone.Model.extend({}) 

var SliderView = Backbone.View.extend({ 
    initialize: function() { 
     this.model.bind('change', this.render); 
    } 

    render: function() { 
     // load data, change scales, etc. 
    } 
}); 

var slider = new Slider(); 
var slider_view = new SliderView({ model: slider }); 

हो सकता है कि एक अच्छा विचार है एक माता पिता को ध्यान में रखते बाइंडिंग डाल करने के लिए, कि तब उप विचारों के प्रेषण होता है, अपने काम का समन्वय होगा।

0

थोड़ी देर के लिए बैठ जाओ और विचार करें कि पूरे राज्य को बनाए रखना क्या एक अच्छा विचार है? यूआरएल आधारित राज्य प्रबंधन के लिए मुख्य प्रेरणा ब्राउज़र आधारित नेविगेशन बटन का समर्थन करने और एक पृष्ठ को बुकमार्क करने में सक्षम होने में सक्षम है। विज़ुअलाइज़ेशन ऐप में, आपका डेटा शायद हर पल बदल जाएगा। यह ऐसा कुछ नहीं है जिसे आप अपने ऐप-यूआरएल में जारी रखना चाहते हैं। क्या आप वास्तव में चाहते हैं कि जब कोई उपयोगकर्ता आपके ऐप को बुकमार्क करता है और तीन दिन बाद उस पर वापस आता है - वह तीन दिन के पुराने डेटा के लिए विज़ुअलाइजेशन देखता है? आपके परिदृश्य के लिए, मानते हुए कि मैंने आपकी आवश्यकताओं को गलत समझा नहीं है, मैं डेटा मॉडल को अपने मॉडल में रखने की सलाह दूंगा।

मॉडल डेटा के साथ विचारों के सिंक्रनाइज़ेशन के संबंध में, हां आप अपने बाध्यकारी तर्क को स्वयं ही कोड कर सकते हैं। उस स्थिति में आपकी व्यू क्लास पहली रेंडर पर बाइंडिंग स्थापित करने का ख्याल रखेगी। और बाद में कॉल प्रस्तुत करने के लिए, जिसे मॉडल में किसी भी बदलाव घटना के जवाब में बुलाया जा सकता है, डीओएम/कैनवास को रीफ्रेश करेगा जहां विज़ुअलाइजेशन मौजूद है।

शायद आपको डेटा-सिंक्रनाइज़ेशन के लिए एक प्लगइन की प्रतीक्षा करनी चाहिए जो आपके लिए बॉयलरप्लेट का अधिक ख्याल रखती है। This page कुछ डेटा-बाध्यकारी एक्सटेंशन उपलब्ध कराता है। Orchestrator एक और समाधान है जिस पर मैं काम कर रहा हूं, जो इस संबंध में सहायक हो सकता है।