2012-01-17 17 views
5

http://jsfiddle.net/nalberg/E3nBu/4/KnockoutJs - नकल पंक्तियाँ

इस के साथ किसी भी मदद के कारण? मुझे उपयोग करते समय डुप्लिकेट पंक्तियां मिल रही हैं: नॉकआउटजे: http://knockoutjs.com/ और jquery.tablesorter प्लगइन: (http://tablesorter.com/docs/)।

असल में, पहली बार सबकुछ लोड होता है ... यह बहुत अच्छा काम करता है। लेकिन अगर मैं टेबल को सॉर्ट करने के बाद नॉकआउट डेटा से जुड़े डेटा को प्रतिस्थापित या बदलता हूं ... मुझे डुप्लिकेट पंक्तियां मिलनी शुरू होती हैं। लगता है कि प्रत्येक अपनी पंक्ति सेट बना रहा है और बनाए रखता है।

उत्तर

0

मेरे पास आपके लिए समाधान है। हालांकि यह धीमा हो सकता है, लेकिन यह काम करता है। समाधान टेम्पलेट का उपयोग करना और jquery का उपयोग करना है। eachforeach के बजाय। एचटीएमएल में कोड यहां दिया गया है:

// replace this div with the table 
<div id="peopleTemplateContainer" data-bind="{template: 'peopleTemplate' }"> 

    <script id="peopleTemplate" type="text/html"> 
    <table id="dataGrid" border="1"> 
     <thead> 
     <tr> 
     <th><b>Sortable Header (sort click me)</b></th> 
     </tr> 
     </thead> 
     <tbody > 
      {{each(index,compliance) people()}} 
     <tr > 
      <td >${data}</td> 
     </tr> 
     {{/each}} 
     </tbody> 
    </table> 
    </script> 
1

मुझे लगता है कि दो समस्याएं हैं जो एक-दूसरे को जोड़ती हैं। सबसे पहले आपके पास एक अवलोकन योग्य सरणी है लेकिन सरणी के अंदर की चीजें ko.observable नहीं हैं, वे केवल नियमित जेएस ऑब्जेक्ट्स हैं। इसलिए यदि आप टेबल में आइटम मान बदलते हैं तो व्यूमोडेल अपडेट नहीं होता है। दूसरा, मुझे लगता है कि आपको टेबललेटर प्लगइन से गुजरना चाहिए और नॉकआउट में अवलोकन योग्य सूची को सॉर्ट करना चाहिए और बाइंडिंग आपके लिए काम करने दें। आप ko.observable arrays here को सॉर्ट करने के लिए जानकारी पा सकते हैं।

+0

मेरे उदाहरण में (मैं एक बेला डाल पर ध्यान देंगे) मैं कभी नहीं सरणी के भीतर वस्तुओं को बदलने रहा हूँ, केवल बदल रहा है जो आइटम के सदस्य हैं की तरह लग रहे हो सकता है सरणी जो अवलोकन सरणी द्वारा कवर किया गया है। केओ के माध्यम से छंटनी एक अच्छा विचार है, लेकिन यह टेबल कोडर के रूप में इसे लागू करने के लिए बहुत सारे कोड होगा। – Arbiter

+0

कृपया अपना पहेली पोस्ट करें। नॉकआउट में छंटनी करना पूरा करना बहुत आसान है। – PlTaylor

+0

टेबलस्टर की सभी सुविधाओं को कार्यान्वित करने के लिए मनमाने ढंग से कॉलम (अगर मेरे पास दर्जनों कॉलम हैं) क्रमबद्ध करने में सक्षम होने की तरह, Shift + क्लिक, कस्टम सॉर्टिंग एल्गोरिदम इत्यादि का उपयोग करके एक साथ कई कॉलम पर सॉर्ट करना बहुत कोड होगा। सॉर्ट किए गए परिणाम के लिए एक गणना किए गए अवलोकन योग्य बनाना संभव है, लेकिन यह सब समायोजित करने के लिए कोड का एक टन होगा। मुझे पता है कि इस समस्या को हल करने के लिए (बेकार) कैसे नॉकआउट के साथ, मैं जानना चाहता हूं कि tableSorter के साथ समस्या को कैसे हल किया जाए। – Arbiter

2
  1. आप सरणी साफ कर सकते हैं तालिका से आबद्ध जैसे

    YourViewModel.list.clearAll(); 
    
  2. साफ़ तालिका शरीर

    $(".gridtable").find('tbody').empty(); 
    
  3. अद्यतन तालिका सॉर्टर

    $(".table_border").trigger("update"); 
    

तो अपने डेटा लोड समारोह इस

self.Load = function() { 
    self.list.removeAll(); 
    $(".gridtable").find('tbody').empty(); 
    $.ajax('/List', { 
     data: $('#yourformname').serializeArray(), 
     global: true, 
     contentType: "application/json; charset=utf-8", 
     type: "Get", contentType: "application/json", 
     success: function (result) { 
      var mappedList = $.map(result, function (item) { return new List(item) }); 
      self.List(mappedList); 

      $(".table_border").trigger("update"); 

     } 
    }); 
}; 
संबंधित मुद्दे