在Tablesorter上动态添加和删除小部件

时间:2014-02-09 04:46:46

标签: jquery jquery-plugins tablesorter

在jquery加载开始时 - 仅使用zebra小部件初始化tablesorter:

$('.tablesorter-blue').tablesorter({
   widthFixed : true,           
   usNumberFormat : false,
   sortReset      : true,
   sortRestart    : true,
   widgets        : ['zebra']
}); 

通过按钮单击我动态添加“滚动条”小部件:

$('.tablesorter-blue').trigger('applyWidgets', true);
$('.tablesorter-blue')[0].config.widgets = ['scroller'];

运行正常,因为它添加了滚动小部件,并且还保留了上一个小部件(斑马)。

我目前遇到的问题是从tablesorter再次删除滚动小部件并保留zebra小部件。我已经尝试过这些代码,但失败了:

来自文档 - refreshwidget - http://mottie.github.io/tablesorter/docs/#refreshwidgets

//remove all widgets
$('.tablesorter-blue').trigger('refreshWidgets', true, true);
$('.tablesorter-blue')[0].config.widgets = [];

//re-add widget (zebra)
$('.tablesorter-blue').trigger('applyWidgets', true);
$('.tablesorter-blue')[0].config.widgets = ['zebra'];

这是报告的错误:

TypeError: $(...)[0].config is undefined

更新: 添加的代码由@mottie给出 - 滚动条仍然没有影响

        $('.tablesorter-blue').closest('.tablesorter-scroller').find('.tablesorter-scroller-header').remove();
        $('.tablesorter-blue')
            .unwrap()
            .find('.tablesorter-filter-row').removeClass('hideme').end()
            .find('thead').show().css('visibility', 'visible');
        $('.tablesorter-blue')[0].config.isScrolling = false;

更新时间:2014年2月10日

由于widget-scroller.js更新的mottie,问题现在已经解决了。我已经用新版本更新了我的代码。

如演示所示,这是我添加和删除滚动窗口小部件的代码:

//initialize tablesorter
//THE TRICK IS TO PUT IN A VARIABLE LOL, SO THAT IT CAN BE UPDATED LATER :D
//THANKS AGAIN MOTTIE
var $tblSorter = $('.tablesorter-blue').tablesorter({               
    widgets: ['zebra'] //no SCROLLER
});

//Code for adding scroller
$tblSorter.trigger('refreshWidgets', [true, true]); //REMOVE ALL WIDGETS
$tblSorter[0].config.widgets = ['zebra', 'scroller']; //ADD ZEBRA & SCROLLER
$tblSorter.trigger('applyWidgets');

//Code for removing scroller
$tblSorter.trigger('refreshWidgets', [true, true]); //REMOVE ALL WIDGETS
$tblSorter[0].config.widgets = ['zebra']; //REMOVE THE SCROLLER, RETAIN ZEBRA ONLY
$tblSorter.trigger('applyWidgets');

2 个答案:

答案 0 :(得分:1)

对于将来遇到这个问题的其他人,自v2.25起,TableSorter内置了一个“ removeWidget”方法。

<Window x:Class="Contacts_App.View.ContactsWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Contacts_App.View"
        xmlns:vm="clr-namespace:Contacts_App.ViewModel"
        mc:Ignorable="d"
        Title="Contacts Window" Height="320" Width="400">

    <Window.Resources>
        <vm:ContactsViewModel x:Key="vm"/>
    </Window.Resources>

    <StackPanel Margin="10">
        <Button 
            Content="New Contact"
            Command="{Binding NewContactCommand}"/>
        <TextBox Margin="0,5,0,5"/>
        <ListView
            Height="200"
            Margin="0,5,0,0"
            ItemsSource="{Binding Contacts}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Label Content="{Binding Name}" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackPanel>

</Window>

答案 1 :(得分:0)

I&#39; M悲伤地说,卷轴插件需要大量的工作,和错误修正;这包括在刷新小部件时将其从表中删除。

我回答了一个类似的问题,描述了如何remove the scroller here。这是您需要的相关代码:

// remove scroller widget completely
$table.closest('.tablesorter-scroller').find('.tablesorter-scroller-header').remove();
$table
    .unwrap()
    .find('.tablesorter-filter-row').removeClass('hideme').end()
    .find('thead').show().css('visibility', 'visible');
$table[0].config.isScrolling = false;

更新:哦,我注意到在上面的代码中,参数传递给&#34; refreshWidgets&#34;没有用括号括起来。它应该是这样的:

$('.tablesorter-blue').trigger('refreshWidgets', [true, true]);

here is a demo,删除小部件代码略有修改版本:

$(function () {
    $('#table1').tablesorter();

    var $table2 = $('#table2').tablesorter({
        widgets : ['scroller']
    });

    $('button').click(function(){
        var widgets = $table2[0].config.widgets;
        $table2.trigger('refreshWidgets', [true, true]);
        $table2[0].config.widgets = $.inArray('scroller', widgets) >= 0 ?
            [] : ['scroller'];
        $table2.trigger('applyWidgets');
    });

});