2012-05-10 22 views
19

इसी प्रकार के प्रश्न के रूप में: Select element's initial valueKnockoutJS चयन विकल्प और चयनित मूल्य

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

क्योंकि डेटा मॉडल का चयनित मान बीज डेटा में ऑब्जेक्ट संदर्भ के बराबर नहीं है, कुछ भी नहीं चुना जाता है।

अभी, मैं प्रत्येक इकाई के माध्यम से लूपिंग कर रहा हूं, सही चयनित मूल्य ढूंढ रहा हूं, जो बीज डेटा के बराबर है, फिर नॉकआउट जानता है कि इसे कैसे तारित किया जाए।

क्या यह एक और अधिक सुरुचिपूर्ण समाधान है? मैंने अधिक जानकारी के साथ एक सरलीकृत उदाहरण fiddled ... http://jsfiddle.net/hbrYM/14/

उत्तर

34

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

http://jsfiddle.net/VLTFB/3/

आप (विकल्प बंधन पर optionsValue विकल्प का उपयोग करने कि अगर भावना :)

<select data-bind="options: seedData, 
        optionsText: 'firstName', 
        optionsValue: 'ID', 
        value: data.selectedValue"> 

संपादित करता है की आवश्यकता होगी

जैसा कि बताया जा आप सही फिर से चुनें कर सकते हैं एक गणना (untested) के साथ आइटम।

vm.currentlySelected = ko.computed(function() { 
    for (var i = 0; i < this.seedData().length; i += 1) { 
     var data = this.seedData()[i]; 
     if (data.ID === this.selectedValue()) { 
      return data; 
     } 
    } 
    return null; 
}, vm); 

उम्मीद है कि इससे मदद मिलती है।

+0

उत्तर देने के लिए धन्यवाद, यह समझ में आता है। मैं वर्तमान में ऑब्जेक्ट (केवल आईडी नहीं) वापस भेजता हूं जो तब deserialized और जारी हो जाता है। मैं वास्तव में उम्मीद कर रहा था कि केओ को "निर्देश" करने का एक तरीका था कि इसे कैसे तार किया जाए क्योंकि मेरे पास इस विशेष यूआई में कई अलग-अलग चयन हैं ... – aswallows

+1

आप सर्वर से चुनिंदा डेटा के समय भी ऑब्जेक्ट को आसानी से वापस भेज सकते हैं अंदर आता है, बस आईडी भेजें। जब आपको एक नया चयनित वापस भेजने की आवश्यकता होती है तो बस एक गणना की जाती है जो वर्तमान में चयनित ऑब्जेक्ट को वापस लेती है (संपादन देखें)। यह वास्तव में ऐसा करने के लिए दुबला है, आपके पास पहले से ही बीज डेटा है, इसलिए फिर से उस अतिरिक्त जानकारी को क्यों परेशान करना परेशान है। – madcapnmckay

+0

प्रतिक्रिया के लिए धन्यवाद! मैं उस दृष्टिकोण का उपयोग करने पर एक नज़र डालेगा। – aswallows

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