How to work with Jquery Table Sorter with knockout

后端 未结 2 404
野性不改
野性不改 2021-01-02 17:00

I have a table on which i need to apply sorting. I\'m using knockout and jquery.tablesorter.js. I have tried custom binding also but is not helping. Without knockout my code

相关标签:
2条回答
  • 2021-01-02 17:13

    Here is an example: http://jsfiddle.net/jearles/RGsEH/

    NOTE: The JS and CSS file dependencies are brought in under Managed Resources.

    HTML

    <table data-bind="sortTable: true">
      <thead>
        <tr>
          <th>Type</th>
          <th>Title</th>
        </tr>
      </thead>
      <tbody data-bind="foreach: course">
       <tr>
          <td data-bind="text: type"></td>
          <td data-bind="text: title"></td>
        </tr> 
      </tbody>
     </table>
    

    JS

    function Course(type, title) {
        this.type = type;
        this.title = title;
    }
    
    var ViewModel = function() {
        this.course = ko.observableArray([
            new Course("type", "course1"),
            new Course("another_type", "course2"),
            new Course("second_type", "course5"),
            new Course("third_type", "course4"),
            new Course("fourth_type", "course3")        
        ]);
    }
    
    ko.bindingHandlers.sortTable = {
        init: function(element, valueAccessor) {
            setTimeout( function() {
                $(element).addClass('tablesorter');
                $(element).tablesorter({widgets: ['zebra']});
            }, 0);
        }
    };
    
    ko.applyBindings(new ViewModel());
    
    0 讨论(0)
  • 2021-01-02 17:38

    The above solution by @john Earles works on pre defined data tables but when we are adding dynamic data to tables, it kinda breaks.

    please check this : http://jsfiddle.net/vkctata/vdcox07c/1/

    function Course(type, title) {
          this.type = type;
          this.title = title;
        }
        var ViewModel = function() {
          this.addNewItem = function() {
            this.course.push(new Course("nth_type", "course33"));
            return false;
          }
          this.course = ko.observableArray([
            new Course("type", "course1"),
            new Course("another_type", "course2"),
            new Course("second_type", "course5"),
            new Course("third_type", "course4"),
            new Course("fourth_type", "course3")
          ]);
        }
    
        ko.bindingHandlers.sortTable = {
          init: function(element, valueAccessor) {
            setTimeout(function() {
              $(element).addClass('tablesorter');
              $(element).tablesorter({
                widgets: ['zebra']
              });
            }, 0);
          }
        };
    
        ko.applyBindings(new ViewModel());
    

    we found a way to create nearly generic sorting, please follow this link knockout sort

    0 讨论(0)
提交回复
热议问题