2010-09-06 14 views
6

मैं एक रेल ऐप बनाने की कोशिश कर रहा हूं जिसमें आप पृष्ठ पर कई अलग-अलग स्थानों से उसी मॉडल को संपादित कर सकते हैं। मैं परिवर्तनों को मैन्युअल रूप से सहेजने के विकल्प के साथ, प्रत्येक एक्स सेकंड में स्वचालित रूप से सहेजे जाने के लिए परिवर्तन चाहता हूं।रेल: Google डॉक्स-स्टाइल ऑटोसेव

मैं एक समाधान के साथ आया हूं, लेकिन यह बहुत जटिल लगता है, और मुझे लगता है कि अन्य रेल उपयोगकर्ताओं को पहले से ही इसी तरह के प्रश्नों का सामना करना पड़ा है।

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

एक बार सबमिट होने के बाद, छुपा फॉर्म मॉडल को अपडेट करता है, और मॉडल में तर्क होता है कि प्रतिक्रिया में कौन सी आरजेएस फाइलों को वापस किया जाना चाहिए। ये बंडल किए गए हैं और अपडेट प्रतिक्रिया के रूप में भेजे गए हैं।

कुछ सीमाएँ:

  • एक रूप टैग (एक से अधिक मॉडल पृष्ठ पर नियंत्रक देखते हैं /)
  • एक ही क्षेत्र के कई स्थानों
  • से संपादन योग्य हो सकता है में पूरे पृष्ठ लपेट नहीं कर सकते

किसी के पास अधिक कुशल तरीका है?

उत्तर

3
  • के रूप में ज्यादा फॉर्म बनाने के रूप में आप भी एक ही मॉडल
  • अद्यतन ट्रिगर का एक ही उदाहरण के अपने पेज में की जरूरत है या तो एक जावास्क्रिप्ट setInterval कॉल या अपनी फ़ॉर्म फ़ील्ड पर onBlur होगा।
  • आपका नियंत्रक एक आरईएसटी होना चाहिए, और यह जेसन वैरिएबल में सफलता या त्रुटि संदेश लौटाएगा और एक HTTP स्थिति (200, 422)
  • आरजेएस भूल जाओ, ग्राहक पक्ष सोचें। आपके पृष्ठ में प्रत्येक फॉर्म आपके नियंत्रक की अद्यतन विधि में फ़ॉर्म सबमिट करेगा। फ़ॉर्म सबमिट करने वाले जावास्क्रिप्ट में एक त्रुटि या सफलता कॉलबैक होगा जो तब सफलता या त्रुटि संदेश दिखाएगा। विचार यह है कि जावास्क्रिप्ट फ़ॉर्म "जानता है" फ़ॉर्म भेज रहा है जो वर्तमान में सबमिट कर रहा है, और यह स्वयं द्वारा प्रस्तुत किए गए फॉर्म के आधार पर त्रुटि या सफलता दिखाने में सक्षम होना चाहिए, यह नियंत्रक नौकरी नहीं है।
  • पूरे पृष्ठ को सहेजना सिर्फ सभी रूपों से सभी फ़ील्ड को क्रमबद्ध करना और अद्यतन विधि को भेजना है। (serialize देखें)
+0

1. मैं इनपुट फ़ील्ड के बीच आईडी संघर्ष से कैसे बचूं? याद रखें कि मैं एक ही फ़ील्ड को कई अलग-अलग स्थानों में संपादित करने की अनुमति देना चाहता हूं – shmichael

+0

2. मैं आरजेएस का उपयोग किये बिना किसी अपडेट किए गए फॉर्म फ़ील्ड के सभी प्रस्तुतियों को अपडेट करने का ख्याल रखूंगा? मैं पूरे पेज को एक फ़ील्ड अपडेट के लिए रीफ्रेश नहीं करना चाहता हूं। – shmichael

+0

के लिए 1. आप अपने इनपुट सहायक में एक आईडी पैरामीटर पास कर सकते हैं। <% = f.text_field: नाम,: id => 'bla'%> टकराव से बचने के लिए यह आपकी आईडी का ख्याल रखने के लिए तब तक निर्भर है। हो सकता है कि आप उन्हें फॉर्म नाम – hellvinz

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