2013-04-03 5 views
8

यह काम कर रहा है का चयन करें:उपयोग ट्विटर बूटस्ट्रैप बटन समूह रेडियो के रूप में नॉकआउट बाइंडिंग के साथ

view.html

<div><input type="radio" name="radioPriority" data-bind="checked: priority" value="want" style="margin-top: -3px; margin-right: 3px;" />I want to</div> 
<div><input type="radio" name="radioPriority" data-bind="checked: priority" value="need" style="margin-top: -3px; margin-right: 3px;"/>I need to</div> 

controller.js

function feedbackViewModel() { 
    var self = this; 
    self.priority = ko.observable("want"); 
    //lots of other stuff 
} 

जैसी उम्मीद थी, जब आप "रेडियो" प्राथमिकता देखने योग्य मूल्य परिवर्तन में दूसरे रेडियो का चयन करते हैं। हालांकि, मैं एक रेडियो बूटस्ट्रैप बटन समूह को रेडियो के रूप में उपयोग करना चाहता हूं। यहाँ एचटीएमएल मेरे पास है, लेकिन यह मानने योग्य अपेक्षा के अनुरूप नहीं बदलता है:

<span class="btn-group" data-toggle="buttons-radio"> 
    <button data-bind="checked: priority" type="button" class="btn" value="want">I want to</button> 
    <button data-bind="checked: priority" type="button" class="btn" value="need">I need to</button> 
</span> 

अद्यतन मैं एक jsfiddle यहाँ जा रहा है: http://jsfiddle.net/a8wa8/6/ "priority1" मानक रेडियो चयन और "priority2" है बूटस्ट्रैप बटन।

उत्तर

9

समस्या यह है कि आप Checked का उपयोग कर रहे बटन के साथ बाध्यकारी हैं, इसके बजाय आप क्लिक बाइंडिंग का उपयोग कर सकते हैं।

http://jsfiddle.net/a8wa8/7/

अपडेट किया गया::

हाँ आप ko css binding का उपयोग करके इस लक्ष्य को हासिल कर सकते हैं इस बेला की जाँच करें। इस अद्यतन बेला की जाँच करें:

Updated Fiddle

+0

यह अच्छी तरह से काम करता है सिवाय इसके कि जब मैं मॉडल बदलता हूं तो यह दृश्य को अपडेट नहीं करता है। यानी, प्राथमिकता 2 ('इच्छित') को व्यावहारिक रूप से उचित बटन का चयन नहीं करता है। क्या यह आसानी से करने योग्य है? –

+1

@ScottBeeson कृपया मेरे अपडेट किए गए उत्तर की जांच करें और मुझे बताएं कि आप यही चाहते हैं? – gaurav

+0

बिल्कुल सही! धन्यवाद –

6

checked binding केवल चेकबॉक्स (<input type='checkbox'>) या एक रेडियो बटन (<input type='radio'>) जैसे "चेक करने योग्य" नियंत्रणों के साथ काम करता है।

लेकिन आपके पास अपने दूसरे उदाहरण में button है जहां बूटस्ट्रैप बस रेडियो बटन समूह के रूप को अनुकरण करता है ताकि checked बाइंडिंग काम न करे।

हालांकि आप click binding उपयोग कर सकते हैं, जहां आप अपनी नमूदार को मान पास:

<span class="btn-group" data-toggle="buttons-radio"> 
    <button data-bind="click: function() { priority2('want') }" 
      type="button" class="btn" value="want">I want to</button> 
    <button data-bind="click: function() { priority2('need') }" 
      type="button" class="btn" value="need">I need to</button>  
</span> 

और तुम बंधन एक कस्टम के पीछे यह छिपा सकते हैं:

ko.bindingHandlers.valueClick = { 
    init: function(element, valueAccessor, allBindingsAccessor, 
        viewModel, bindingContext) {  
     var value = valueAccessor(); 
     var newValueAccessor = function() { 
      return function() { 
       value(element.value); 
      }; 
     }; 
     ko.bindingHandlers.click.init(element, newValueAccessor, 
      allBindingsAccessor, viewModel, bindingContext); 
    }, 
} 

तो फिर तुम इसे पसंद का उपयोग कर सकते हैं:

<span class="btn-group" data-toggle="buttons-radio"> 
    <button data-bind="valueClick: priority2" 
      type="button" class="btn" value="want">I want to</button> 
    <button data-bind="valueClick: priority2" 
      type="button" class="btn" value="need">I need to</button>  
</span> 

डेमो JSFiddle.

+0

यह भी काम करता है, हालांकि यह बहुत गौरव के जवाब से कहीं अधिक जटिल है, लेकिन यह एक ही मुद्दा है। यह दो तरह से बाध्यकारी नहीं है। अगर मैं प्राथमिकता ('चाहता हूं') और प्राथमिकता 2 ('चाहता हूं') सेट करता हूं तो आप देखेंगे कि रेडियो स्वचालित रूप से चुना गया है लेकिन बूटस्ट्रैप बटन नहीं है। –

+0

यदि आप दो तरह के बाध्यकारी भी चाहते हैं तो आपको 'css' बाध्यकारी के साथ 'क्लिक' को गठबंधन करने की आवश्यकता है। मेरे 'वैल्यूक्लिक' कस्टम बाध्यकारी हैंडलर को भी इस मामले को संभालने के लिए बढ़ाया जा सकता है। सबसे पहले यह जटिल लग सकता है लेकिन यह अधिक रखरखाव समाधान है। क्योंकि आपके स्वीकृत उत्तर में आपको बटनों पर "वांछित" और "आवश्यकता" दो बार और "प्राथमिकता 2" दो बार दोहराना होगा। दूसरी तरफ एक कस्टम बाध्यकारी के साथ आपको एक बार सबकुछ लिखना होगा। – nemesv

+0

@nemesv Duuuuude आपके समाधान जो मुझे चाहिए उसके लिए बिल्कुल सही है। धन्यवाद, मुझे दो तरह के बाध्यकारी को संभालने के लिए 'valueClick' की कार्यक्षमता को विस्तारित करने की आवश्यकता होगी, जैसा कि आपने कहा था, लेकिन अब तक यह सही है। – Skytiger

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