2012-01-18 11 views
8

मैं दो प्रश्न कृपया मिल गया है द्वारा निर्धारित:मान आवंटित नमूदार पीटकर करने गतिशील स्ट्रिंग नाम

मैं नॉकआउट उपयोग कर रहा हूँ (मैं एक KO noob sry हूँ) और मैं एक विशिष्ट करने के लिए एक मूल्य निर्दिष्ट करना चाहते हैं नॉकआउट एक क्लिक इवेंट पर देखने योग्य है, लेकिन केवल क्लिक ईवेंट पर ही निर्धारित किया जाना चाहिए (और मूल्य मैं डेटा-बाइंड = क्लिक पर पास करूंगा) ... क्या यह किया जा सकता है ... क्या मुझे नॉकआउट अवलोकन करने योग्य चर मिल सकता है सिर्फ यह जानने के बजाय कि इसके नाम पर एक मूल्य निर्दिष्ट करने जा रहा है, इसके नाम पर (एक स्ट्रिंग मान) पर?

और, दूसरा कम महत्वहीन, अगर ऐसा कोई कार्य ko.ObservableByName (stringName) मौजूद है, तो इसे किसी भी तरह से उपयोग करना संभव है और पेज लोड पर एकाधिक चयन आइटमों के पूर्व-चयन को असाइन करना संभव है .. और कैसे कृपया?

मैं यह करने के की कोशिश की है ... मैं का उपयोग किया है डेटा-बाँध = "पर क्लिक करें: loadData.bind ($ डेटा, 'param1', 'param2')" और फिर मैं 'की रेखा के साथ कुछ हो जाता है कि मेरे नॉकआउट viewmodel में एक ईवेंट हैंडलर का निर्माण करके उन param1 और param2 स्ट्रिंग मान प्राप्त करने में सक्षम हूँ:

self.loadData = function (src, dest) { 
    //dest is 'param1', src is 'param2', both are stings 
    if (src == 'param1') 
     self.p1observable($('#' + dest).val()); 
    else 
     self.p2observable($('#' + dest).val()); 
} 

इस के साथ मेरी सबसे बड़ी समस्या मैं का निर्माण करना है पी 1/पी 2 अवलोकन के साथ समारोह पहले से ही निर्दिष्ट है और इसमें कड़ी-कोडित है, लेकिन वास्तव में मैं अपने कुछ अवलोकनों के नाम से नाम या संदर्भ के रूप में उपयोग करने के लिए param1 और param2 प्राप्त करना चाहता हूं, जिसे मैं इच्छानुसार पास कर सकता हूं (या तो एक मूल्य को सौंपा जा सकता है, या बेहतर फिर भी एक और अवलोकन करने योग्य मैं मान को पहले से कॉपी करना चाहता हूं), और इस प्रकार मैं क्लिक फंक्शन कॉल में मूल्यों को पारित करने के लिए सीधे मेरे चयन के देखने के लिए असाइन कर सकता हूं (और इस तरह के छोटे कार्यों की बड़ी संख्या नहीं है) ...

शायद मैं इसे गलत तरीके से जा रहा हूं? हो सकता है कि मुझे स्ट्रिंग मानों में बिल्कुल गुजरना न पड़े ... शायद मुझे एक अवलोकन करने योग्य ऑब्जेक्ट में पास करने की कोशिश करनी चाहिए, लेकिन डेटा-बाइंड के अंदर कोई ऐसा कैसे कर सकता है, क्या आप सिर्फ myViewModel.myObservable या ऐसा कुछ लिखते हैं?

+0

क्या आप अभी तक जो कुछ हासिल कर चुके हैं उसका एक उदाहरण पोस्ट कर सकते हैं? – ericb

उत्तर

15

आप अपने माता पिता वस्तु है, तो आप एक नमूदार इस वाक्य रचना का उपयोग करके पहुँच सकते हैं:

viewModel[observableName]

और की तरह मान सेट:

viewModel[observableName](newValue)

यहां एक नमूना है जहां आप ड्रॉपडाउन से संपत्ति का नाम चुन सकते हैं और उसके बाद मान को तदनुसार सेट कर सकते हैं और दूसरा बटन जहां एक अवलोकन योग्य/मूल्य निर्धारित करने के लिए सीधे बाध्य होता है: http://jsfiddle.net/rniemeyer/CTnUQ/

+0

जो लगभग वही था जो मुझे चाहिए था, इसलिए बहुत धन्यवाद ... बस एक sidenote, अगर अंदर देखें मॉडल, इस [अवलोकन योग्य] नोटेशन का उपयोग करें ... लेकिन मुझे लगता है कि यह काम करने जा रहा है अगर आप इसे बाहर से उपयोग कर रहे हैं देखें मॉडल निर्माण, मुझे यकीन नहीं है कि यह काम करेगा यदि उदाहरण के लिए मेरे पास कई अलग-अलग पेज थे और प्रत्येक पृष्ठ बाहरी दृश्य लोड हो रहा है मॉडल स्क्रिप्ट, तो कई पेज समान डेटा उदाहरणों का उपयोग करेंगे या प्रत्येक एक दृश्य की अपनी प्रतिलिपि बाहरी .js फ़ाइल से लोड किया गया मॉडल? _ मैं जल्द ही कोशिश करूँगा, मैं जेक्यूमोबाइल द्वारा फंस गया हूं, और इसके असफल परिवर्तन WP7_ पर पेज बग – dada

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