2013-05-07 9 views
7

आम तौर पर जब मैं एक का चयन करें सूची है मैं इसे नॉकआउट के साथ इस तरह बाँध:चयनित विकल्प ईद और मूल्य

<select 
    data-bind=" 
     options: data, 
     optionsText: 'Name', 
     optionsValue: 'Id', 
     optionsCaption: 'Select ...', 
     value: dataSelectedId" ></select> 

लेकिन वहाँ इस तरह के बंधन के साथ एक समस्या है: आप चयनित ऑब्जेक्ट नहीं है। इसके बजाय आपके पास आईडी है। इन दो आवश्यकताओं को कैसे मर्ज करें: आइटम की आईडी और आइटम दोनों के लिए बाध्यकारी है?

अभी मैं computed नमूदार का उपयोग चयनित आइटम, जो आमतौर पर इस तरह दिखता है प्राप्त करने के लिए:

self.dataSelectedCO = ko.computed(function() { 
    for (var i = 0; i < self.data().length; ++i) 
     if (self.data()[i].Id() == self.dataSelectedId()) 
      return self.data()[i]; 
}); 

मैं एक कस्टम फ़ंक्शन का उपयोग मूल्य गेटर रैप करने के लिए कोशिश की है, लेकिन यह हर तत्व जब चयन परिवर्तन के लिए कहा जाता है , इसलिए इस दृष्टिकोण का उपयोग करने के यहां कोई लाभ नहीं है। Here एक jsfiddle है।

उत्तर

7

optionsValue पैरामीटर हटाएं। फिर चयनित मान Id के बजाय 'चयनित आइटम' होगा।

अद्यतन कोड होगा:

<select 
    data-bind=" 
    options: data, 
    optionsText: 'Name', 
    optionsCaption: 'Select ...', 
    value: dataSelectedItem" ></select> 

dataSelectedItem अब चयनित आइटम होगा।

एक बार आपके पास आइटम हो जाने पर। आप Id ऑब्जेक्ट से dataSelectedItem().Id

+0

मैं इसे इस तरह से नहीं कर सकता, क्योंकि तब मैं इस चयन को ऐसे फॉर्म में नहीं रख सकता जो सर्वर पर भेजता है जब तक कि मैं चयनित आईडी के लिए अतिरिक्त छिपी फ़ील्ड नहीं बना देता। लेकिन इसके साथ बाध्य आईडी वाले छिपे हुए क्षेत्र का उपयोग करना इसे बनाएगा। – SOReader

+0

यदि आप आईडी को SELECT के मान के रूप में चाहते हैं, तो चयनित आइटम के लिए गणना किए गए अवलोकन योग्य का उपयोग करना एक बहुत अच्छा तरीका है। – ManojRK

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