2011-12-22 16 views
10

इस बेला में वर्णित के रूप में मैं, चुनें तत्व पर बाध्यकारी मान का उपयोग करने की कोशिश कर रहा हूँ होने का चयन के लिए विफल रहता है: http://jsfiddle.net/MikeEast/nM6dd/2/KnockoutJs में बाध्यकारी मूल्य जब जटिल प्रकार

हालांकि, मैं चयनित सेट करने के लिए सक्षम होने के लिए नहीं कर पा रहे विकल्प (मूल्य बाध्यकारी)।

मुझे पता है कि मैं विकल्प का उपयोग कर सकता हूं वैल्यू बाध्यकारी, लेकिन इससे किसी ऑब्जेक्ट की बजाय स्ट्रिंग मान को बेहतर बनाता है जो बेहतर नहीं है। यदि यह जाने का एकमात्र तरीका है, तो मैं यह सुनिश्चित करने के लिए कैसे करूं कि चयनित विकल्प दृश्य मॉडल पर वापस लिखा गया है?

धन्यवाद!

उत्तर

17

यहां समाधान है। आपको डेटा-बाइंड में विशेषता optionsValue: 'id' जोड़ना होगा। आपको उस दृश्य में भी एक फ़ंक्शन डालना होगा जो मॉडल को चुनता है जो चयनित ऑब्जेक्ट देता है।

एचटीएमएल

<select data-bind="options: items, optionsText: 'name', optionsValue: 'id', value: selectedItemId"></select> 
<span data-bind="text: selectedItem().name"></span> 

जे एस

var viewModel = function() { 
    this.items = ko.observableArray([ 
     { id: 1, name: "Apple" }, 
     { id: 2, name: "Orange"}, 
     { id: 3, name: "Banana"} 
    ]); 
    this.selectedItemId = ko.observable(3); 
    this.selectedItem = function() { 
     var self = this; 
     return ko.utils.arrayFirst(this.items(), function(item) { 
      return self.selectedItemId() == item.id; 
     }); 
    }.bind(this); 
}; 

var vm = new viewModel(); 
ko.applyBindings(vm); 

चीयर्स!

+0

आपके योगदान के लिए धन्यवाद। यह मुझसे पूछे गए प्रश्न को हल करता है। हालांकि, मेरी समस्या इस से किसी अन्य कारण से जड़ है। मैं सर्वर से सरणी को अतुल्यकालिक रूप से लोड कर रहा हूं और जब मुझे प्रतिक्रिया मिलती है तो मैंने अवलोकन योग्य का मूल्य निर्धारित किया है। इसका अर्थ यह है कि अवलोकन करने योग्य ऐरे रीलोड/रीबिंड जो बदले में * मान * पहले सेट को अनदेखा कर देता है। यह डिज़ाइन द्वारा हो सकता है, लेकिन मुझे यकीन नहीं है। यहां व्यवहार दिखाते हुए एक पहेली है: http://jsfiddle.net/MikeEast/nM6dd/12/ –

+0

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

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