2011-04-14 14 views
9

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

जिस ऐप का मैं वर्तमान में इसका उपयोग कर रहा हूं वह एमवीसी 3 है और मुझे पूरी तरह से मेरे नियंत्रक पर "सेव" एक्शन लिखना है, मेरे पेज पर कहीं भी "सेव" बटन प्लॉप करें, पूरे व्यू मॉडेल को उस पर सहेजें कार्रवाई करें और उसके बाद डेटाबेस को जारी रखें। लेकिन जब आप त्वरित संपादन करते हैं और फिर इसे फिर से सहेजते हैं तो क्या होता है? या क्या होगा यदि एक सेव बटन डिज़ाइन के प्रवाह में फिट न हो? इसके बजाए, जब भी कोई बचत बटन नहीं होता है, तो आप हर बार कार्रवाई में बदलाव करना चाहते हैं? जिन विचारों के बारे में मैंने बाउंस किया है वे हैं:

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

मुझे आशा है कि वहां कुछ अच्छे विचार हैं जिनके बारे में मैंने सोचा नहीं है। घोषणात्मक रूप से सब कुछ बांधने में सक्षम होने के लिए और अभी भी को कुशलतापूर्वक बचाएं।

+0

आप MVC conflating कर रहे हैं और MVVM (ASP.NET MVC के रूप में)। वे अनिवार्य रूप से एक ही पैटर्न हैं, लेकिन एमवीवीएम में WPF अनुप्रयोगों के खिलाफ डिजाइन करने के लिए विशिष्ट परिवर्तन हैं। – Will

+0

असल में नॉकआउटजेएस (http://knockoutjs.com) एमवीवीएम पैटर्न का उपयोग करता है, जो पोस्टर भी रेफर कर रहा था। –

+0

बहुत बढ़िया सवाल!नॉकआउट के बिना एक ही सवाल शायद और भी उपयोगी होगा, क्योंकि यह बहुत से लोगों में से एक है, वहां कई जेएस ढांचे हैं। मैं इस प्रश्न के उत्तर _the_ के लिए मेरी तलाश जारी रखूंगा। – noocyte

उत्तर

0

एकमात्र अन्य चीज़ जो मैं सोच सकता हूं subscribing है। जब मैंने पहली बार अपनी पोस्ट पढ़ना शुरू किया, तो मैं झंडे w/grep सोच रहा था।

संपादित करें: बेहतर अभी तक, ko.utils.compareArrays आशाजनक लग रहा है।

Here's एक काम उदाहरण ..

केवल एक चीज है करने के लिए छोड़ दिया 'बनाए रखा' मूल्यों के मूल्यों में परिवर्तन का पता लगाने के लिए है। हालांकि आप अपने रास्ते पर अच्छे हैं।

+0

वाह। सुरुचिपूर्ण कार्यान्वयन के लिए +1 और मैं आगे बढ़ने जा रहा हूं और इसे अभी उत्तर के रूप में चिह्नित कर रहा हूं। प्रश्न प्रकृति में अधिक सैद्धांतिक था, इसलिए मुझे यकीन है कि अभी भी अन्य विधियां हैं, लेकिन जिस तरह से उदाहरण स्थापित किया गया है वह प्रतिभा है। भले ही उस कार्यान्वयन में एक सेव बटन है, फिर भी अच्छा हिस्सा नहीं होना चाहिए। जब तक कुछ ko.utils.compareArrays को ट्रिगर करता है, तो आप _could_ चुनिंदा केवल उन सरणी पोस्ट करते हैं जिनकी आप परवाह करते हैं। जो वास्तव में मैं उत्सुक था। बहुत बढ़िया। आपके सहयोग के लिए धन्यवाद। – Jorin

+0

खुश मैं मदद कर सकता था। –

+3

उदाहरण लिंक टूटा हुआ है ... उदाहरण है कि उदाहरण अभी भी उपलब्ध है? मेरे पास एक व्यूमोडल है जिसमें रिश्तों के कई स्तर हैं और मैंने – littlechris

5

मैं अभी मिक्स 11 से वापस आया जहां मैंने this session में Knockout.js के बारे में भाग लिया। स्टीव सैंडर्सन को एक पूर्ण सीआरयूडी डेमो को क्रैंक करने के लिए यह आपके समय के लायक हो सकता है।

+3

हाँ, मैंने वास्तव में लाइन पर पोस्ट किए जाने पर पिछले हफ्ते उस कुशलतापूर्ण डेमो को देखा था। वास्तव में एक महान डेमो जो दिखाता है कि क्लाइंट पक्ष पर नॉकआउट क्या कर सकता है, लेकिन जब उसने सर्वर पर पोस्ट किया, तो उसने क्लाइंट को रिले को छोड़कर कुछ भी नहीं किया ताकि यह दिखाया जा सके कि यह वास्तव में सर्वर पर जा रहा था। सर्वर में वृद्धिशील परिवर्तनों को सहेजते समय मुझे सबसे अच्छा अभ्यास क्या है ... पेलोड को छोटा और नियंत्रक कुशल रखते हुए। – Jorin

0

आप नॉकआउट के लिए मैपिंग प्लगइन देख सकते हैं, इससे आपको JSON सरणी से नॉकआउट लोड हो सकता है। यदि यह बहुत बड़ा नहीं था, तो आप उस सरणी को टाइमर पर सर्वर पर सहेजते हैं (या परिवर्तन के बाद)। उम्मीद है कि यह मदद करता है, क्षमा करें अगर आप पहले से ही यह जानते थे।

http://knockoutjs.com/documentation/plugins-mapping.html

http://knockoutjs.com/documentation/json-data.html

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

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