2011-09-15 12 views
10

पर कैसे बाध्य करें I Knockout जेएस का उपयोग कर रहा हूं। मेरे पास एक व्यू मॉडल है जिसमें ऑब्जेक्ट्स की एक सरणी है और मैं उपयोगकर्ता को विज़ार्ड शैली इंटरफ़ेस का उपयोग करके ऑब्जेक्ट्स में से किसी एक को संपादित करने की अनुमति देना चाहता हूं। मेरे पास यह मुद्दा है कि विज़ार्ड पर किए गए विकल्पों के आधार पर अलग-अलग चरणों को दिखाएगा। उदाहरण के लिए: उपयोगकर्ता चरण 1 पर 'हां' का चयन करता हैएक नॉकआउट जेएस मॉडल को विज़ार्ड शैली UI

  • तो मैं कदम 2 ए प्रदर्शित
  • उपयोगकर्ता तो मैं कदम 2 बी प्रदर्शित चरण 1 पर का चयन करता है 'नहीं' (यानी एक अलग संवाद प्रपत्र।)

यह चलता है ताकि विज़ार्ड के माध्यम से पथ रैखिक न हों।

मेरा प्रश्न है मैं कम से दृश्य मॉडल के लिए सभी संभव जादूगर यूआई चरणों बाँध शुरू भले ही कुछ कदम कभी नहीं दिखाई जाएगी और कुछ स्क्रीन पर बाइंडिंग अमान्य हो जाएँगे (जैसे। चरण 5 करने के लिए बाध्य कर सकते हैं कर viewModel.theObject.PropertyA.PropertyB.PropertyC() ​​लेकिन प्रॉपर्टीबी अभी भी चरण 1 पर शून्य है)।

यूआई चरणों को बाध्य करने के लिए एक बेहतर तरीका हो सकता है लेकिन मेरी समस्या तब है जब मैं कदम पूरा होने के बाद मॉडल को 'अनबिंड' करने का एक अच्छा तरीका नहीं जानता, इसलिए मैं समाप्त कर सकता हूं मूल सूची से कई वस्तुओं के लिए कदम बाध्य!

उत्तर

13

मुझे लगता है कि ऐसा करने का एक अच्छा तरीका है कि आपका व्यू मॉडल चरणबद्ध हो और अपने यूआई को "चयनित चरण" से बांधें। फिर, प्रत्येक चरण गतिशील रूप से चुन सकता है कि वह कौन सा टेम्पलेट उपयोग करना चाहता है (जैसे post)।

यहाँ विचार का एक मोटा नमूना है: http://jsfiddle.net/rniemeyer/SSY6n/

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

+3

थोड़ा सा यहां अपडेट किया गया: http://jsfiddle.net/rniemeyer/FyuSD/ –

+0

धन्यवाद, रयान। एक बहुत ही रोचक और रचनात्मक दृष्टिकोण। चूंकि मैं अपने विकास में काफी अच्छी तरह से हूं, अब मैं "डेटा-बाइंड = 'अगर: xxx" कथन जो अब के लिए काम कर रहा है, के साथ अनियमित गुणों की रक्षा करने की कोशिश कर सकता है। यद्यपि आपका समाधान कहीं अधिक सुरुचिपूर्ण है! पीएस - आपके ब्लॉग के महान प्रशंसक (www.knockmeout.net)। असाधारण कार्य करते रहिये! –

+0

@RPNiemeyer मैं एएसपीनेट एमवीसी 4 का उपयोग कर रहा हूं और एक '[सीरियलज़ेबल]' विज़ार्ड है जो अलग-अलग पृष्ठों (एमवीसी बुक से) का उपयोग करता है और क्लाइंट-साइड सत्यापन के साथ '[डेटाअनोटेशन]' का भी उपयोग कर रहा है। मैं सोच रहा हूं कि आपका अद्यतन नमूना पृष्ठों को प्रतिस्थापित करने के लिए काम करेगा, लेकिन सत्यापन का उपयोग जारी रखें। कोई विचार? – REMESQ

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