2012-01-31 21 views
6

मैं उपयोगकर्ता नियंत्रण करने के लिए मानचित्रण JSON obejct के लिए नॉकआउट का उपयोग कर सही का निशान, मैं एक चेक बॉक्स की एक सूची है, वेनॉकआउट चेक/सभी कॉम्बो बॉक्स

<input type="checkbox" data-bind="checked: IsEnabled1" /> 

की तरह लग रहा JSONObject

var viewModel = { 
      IsEnabled1 :ko.observable(true),    
      IsEnabled2 :ko.observable(true), 
      IsEnabled3 :ko.observable(false) 
     }; 
    ... 
    ko.applyBindings(viewModel); 

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

वैश्विक चेकबॉक्स

$("#GeneralTable thead tr th:first input:checkbox").click(function() { 
      var checkedStatus = this.checked; 
      $("#GeneralTable tbody tr td:first-child input:checkbox").each(function() { 
       this.checked = checkedStatus;      
      }); 

     }); 

इस कोड को मेरी JSON ऑब्जेक्ट के बाद डेटा कि यूआई से संबंधित नहीं होते हैं।

जेएस पक्ष से चेक बॉक्स के बाद सभी JSON को कैसे अपडेट करें?

+1

आपके द्वारा पोस्ट किया गया कोड हमारे उत्तर देने के लिए पर्याप्त नहीं है आपका प्रश्न। –

+0

अब बेहतर होना चाहिए। धन्यवाद। –

+1

आपके कोड में समस्या, कि आप नोड्स के साथ बातचीत करते हैं। लेकिन आपको डेटा के साथ बातचीत करने की जरूरत है। यह एमवीवीएम दुनिया में बेहतर है :-) कृपया मेरा जवाब जांचें। मुझे लगता है कि यह आपके लिए काम करेगा। – Romanych

उत्तर

16

उदाहरण की जाँच करें: http://jsfiddle.net/MenukaIshan/5gaLjh2c/

मुझे लगता है कि यह वास्तव में आप क्या जरूरत है। सभी वस्तुओं में IsChecked देखने योग्य संपत्ति है। ViewModel में सभी वस्तुओं को चेक या अनचेक करने के लिए गणना योग्य (पठनीय और लिखने योग्य) शामिल है।

+0

यह उपयोग का एक आदर्श उदाहरण है। मेरे दिन दो बार बनाया! –

+0

समान कोड पर काम करना। मैंने तुम्हारी बेवकूफ कोशिश की, लेकिन मेरे मामले में मैं नॉकआउट-3.2.0.जेएस का उपयोग कर रहा हूं और यह काम नहीं कर रहा है (यहां तक ​​कि पहेली में), लेकिन नॉकआउट-2.0.0.जेएस के साथ काम करना। कोई सुराग। –

+0

3.2.4 इस पर काम नहीं कर रहा है –

2

यहाँ http://jsfiddle.net/rniemeyer/kXYuU/

समाधान ऊपर दो तरीके

में सुधार किया जा सकता खाली सूचियों के लिए AllChecked झूठी बनाने -To, हम लंबाई की जाँच करने के

को कम -To जरूरत है एक वैकल्पिक समाधान है लंबी सूची के लिए सभी का चयन करते समय संख्या पुनर्मूल्यांकन, हमें थ्रॉटल

self.AllChecked = ko.computed({ 
    read: function() { 
     var firstUnchecked = ko.utils.arrayFirst(self.Items, function(item) { 
      return item.IsChecked() == false; 
     }); 
     return self.Items.length && !firstUnchecked; 
    }, 
    write: function(value) { 
     ko.utils.arrayForEach(self.Items, function(item) { 
      item.IsChecked(value); 
     }); 
    } 
}).extend({ throttle: 1 }); 
संबंधित मुद्दे