2011-06-17 10 views
15

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

तो, यहाँ मेरे सवालों का (विकी के लिए अच्छे उम्मीदवार मुझे लगता है कि) कर रहे हैं:

  • चाहिए मैं ढेर प्रबंधन, या ब्राउज़र के ढेर करने के लिए अपने आदेश भेजने के लिए एक रास्ता है? (और कैसे मैं देशी आदेशों को संभालने, पाठ textifields में संपादित करता है की तरह इस मामले में क्या)
  • मैं "कमांड संपीड़न" (कमांड समूह) कैसे संभाल जब कुछ आदेश स्थानीय ब्राउज़र
  • हैं मैं कैसे पूर्ववत पता नहीं लगा पाते (ctrl + जेड) कीस्ट्रोक?
  • यदि मैं एक कीप घटना पंजीकृत करता हूं, तो मैं कैसे तय करूं कि मैं डिफ़ॉल्ट को रोकता हूं या नहीं?
  • यदि नहीं, तो क्या मैं कहीं कुछ अनियंत्रित हैंडलर पंजीकृत कर सकता हूं?
  • उपयोगकर्ताओं को वेब पर पूर्ववत करने के लिए उपयोग नहीं किया जाता है, मैं अपने आवेदन पर अन्वेषण/पूर्ववत करने के लिए उन्हें "ट्रेन" कैसे कर सकता हूं?

धन्यवाद सब कुछ।

+0

पूर्ववत करें क्या? ब्राउज़र में प्रविष्टि फ़ील्ड ctrl-z का उपयोग करके पूर्ववत कर चुके हैं। आपको पूर्ववत करने की क्या ज़रूरत है? एक जमा करें? – mplungjan

+0

मेरा संदर्भ मानचित्र निर्माण है लेकिन मैं विषय को थोड़ा सा खोलना चाहता हूं। – nraynaud

उत्तर

1

कैप्चिनो के स्वचालित पूर्ववत समर्थन कार्यों को पूर्ववत प्रबंधक को बताकर क्या गुणों को पूर्ववत किया जाना चाहिए। अब कैसे छात्रों नाम यूआई में परिवर्तित हो जाता है की परवाह किए बिना

[theUndoManager observeChangesForKeyPath:@"firstName" ofObject:theStudent]; 
[theUndoManager observeChangesForKeyPath:@"lastName" ofObject:theStudent]; 

, पूर्ववत मार स्वचालित रूप से इसे वापस लौट जाएगा: उदाहरण के लिए, नाटक आप छात्रों के रिकॉर्ड प्रबंध कर रहे हैं, आप की तरह कुछ करना हो सकता है। कैप्चिनो स्वचालित रूप से उसी रन लूप में कोलेसिंग परिवर्तनों को भी संभालता है, जो दस्तावेज़ को "गंदे" (सहेजने की आवश्यकता) के रूप में चिह्नित करता है, जब पूर्ववत स्टैक आदि पर आइटम होते हैं (दूसरे शब्दों में, उपर्युक्त सभी को समर्थन के लिए आपको करना होगा पूर्ववत करें)।

एक और उदाहरण के रूप में, यदि आप अतिरिक्त और छात्रों के विलोपन पूर्ववत करने योग्य बनाना चाहते थे, है न था निम्नलिखित:

[theUndoManager observeChangesForKeyPath:@"students" ofObject:theClass]; 

"छात्रों" जब से theClass में छात्रों, तो अतिरिक्त और विलोपन की एक सरणी है इस सरणी से ट्रैक किया जाएगा।

+0

धन्यवाद कि यह दिलचस्प है, लेकिन आप ब्राउज़र में मूल पूर्ववत/फिर से कैसे एकीकृत करते हैं? – nraynaud

+0

कैप्चिनो बस इसे संभालता है - यह स्वचालित रूप से इसे सीधे मैक पर cmd-z में जोड़ता है, और खिड़कियों आदि पर उपयुक्त कुंजी बाइंडिंग आदि। यह सब "बस काम" करना चाहिए। –

+0

मेरा उद्देश्य अंधाधुंध कैप्चिनो का उपयोग नहीं करना है, मैं एक ऐसे अनुप्रयोग के लिए एक एंडो सिस्टम बना रहा हूं जो कैप्चिनो का उपयोग नहीं करता है। मैं समझना चाहता हूं कि आपने इससे पहले कैसे किया था। लेकिन फ्रेमवर्क कोड को पढ़ने और प्रोफेसरों के लिए पालन करना वाकई मुश्किल है। – nraynaud

10

आपको ऑब्जेक्ट सृजन और हटाने के लिए कार्य करने की आवश्यकता है। फिर उन कार्यों को पूर्ववत प्रबंधक को पास करें। मेरे जावास्क्रिप्ट पूर्ववत प्रबंधक की डेमो फ़ाइल देखें: https://github.com/ArthurClemens/Javascript-Undo-Manager

डेमो कोड कैनवास दिखाता है, लेकिन कोड अज्ञेयवादी है।

इसमें कुंजी बाइंडिंग नहीं है, लेकिन पहले चरण में आपकी मदद कर सकती है।

स्वयं मैंने इसे वेब एप्लिकेशन में पूर्ववत और फिर से सहेजने के लिए बटन के साथ उपयोग किया है, सहेजने के बगल में।

http://jsfiddle.net/paultyng/TmvCs/22/

यह तो अपने पेज राज्य का javascript ऑब्जेक्ट में प्रतिनिधित्व किया है कि इसके लिए एक इतिहास रखता है एक MVVM मॉडल का उपयोग करता:

+0

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

+0

दरअसल, उस मामले में एक सामान्य दृष्टिकोण काम नहीं करेगा। निरंतर कार्यों के लिए आप केवल अंतिम परिणाम स्टोर करना चुन सकते हैं। –

+0

समस्या "अंतिम परिणाम" का पता लगा रही है, जो सीधे एक स्लाइडर से जुड़ी संपत्ति की तरह है (इसलिए उपयोगकर्ता को उसकी कार्रवाई पर तत्काल प्रतिक्रिया है), आपको पता नहीं है कि वह स्लाइडर को झुकाव के साथ कब समाप्त हुआ है। आप या तो इसे समय के साथ अनुमान लगाने का प्रयास कर सकते हैं (स्लाइडर को झुकाए बिना 2s का मतलब है कि वह समाप्त हो गया है) लेकिन नियंत्रण पर कुछ घटना (माउस बटन की रिहाई) के साथ सही हो जाना मुश्किल है, बस फ्लाई पर पूर्ववत स्टैक को संपीड़ित करें (यह इसका मतलब है कि आपके पास स्टैक पर कुछ तुलनीय सामान हैं, सरल बंद नहीं हैं, या आप ईवेंट समूह को चिह्नित कर सकते हैं। – nraynaud

5

यहाँ एन स्तरीय का एक नमूना नॉकआउट जे एस का उपयोग कर पूर्ववत है।

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