环境:
- VS2012
- ASP.NET MVC4
- j表2.3.0
我注意到,当分页完成时,以前选择的行将消失。。这意味着它们不再被选择。在SelectedRows演示之后,我看到div中填充了当前选定行中的一些字段。但一旦你翻页,选择就会丢失。
已对现有问题发表评论https://github.com/hikalkan/jtable/issues/243
但没有现成的解决方案。
在我的小测试中,我选择了一行,然后翻页到下一页。以下事件按此顺序启动:
- loadingRecords--方法中没有"data"参数,但可以使用选择行演示代码获取当前选择的行
- selectionChanged--"选择行"演示中的代码->未选择行
- recordsLoaded--有新的新数据,但未选择任何数据
同样的问题也发生在排序上[选择丢失],触发的事件顺序相同。
现在,我绝不是一个jQuery或Javascript的家伙。
但想知道是否可以创建一个集合类,然后当用户选择一行时,将行的键添加到集合中(如果取消选中该行,则将其移除)。在分页时,让loadingRecords更新集合,并在激发selectionChanged时,如果集合中有项目;它只是重新选择它们。
想法/解决方案?
发现这个问题没有得到回答,然后就把这个功能添加到了一个网站上。所以我分享我所做的一切,希望它能帮助其他人。我认为可能有一些优化可用,所以请随时提供它们作为评论。
我的策略是制作一个$colleges数组来存储行键,更新这个数组以匹配所选内容,并在分页活动中使用这个数组来选择行。selectionChanged事件仅包括可见行。因此,在这个版本中,我首先从$colleges数组中删除所有可见的行,然后再添加回任何当前可见和选定的行。
var $colleges;
...
$('#collegeSearchContainer').jtable ({
...
fields: {
uid: { key:true, list:false, edit:false, create:false }
...
},
selectionChanged: function () {
var $table = $('#collegeSearchContainer');
// Get all currently selected rows
var $selectedRows = $table.jtable('selectedRows');
// DEL - add all non-visible rows to colnew then swap
var $colnew = [];
for (var i = 0, len = $colleges.length; i < len; i++) {
$row = $table.jtable('getRowByKey', $colleges[i]);
if (!$row)
$colnew.push($colleges[i]);
}
$colleges = $colnew;
// ADD - make sure currently selected rows are selected
if ($selectedRows.length > 0) {
$selectedRows.each(function () {
var record = $(this).data('record');
if ($.inArray(record.uid, $colleges) < 0)
$colleges.push(record.uid);
});
}
// UPDATE selection indicator for colleges
$('#email_schools').html($colleges.length);
},
rowInserted: function (event, data) {
// select those colleges that have been selected in the past
if ($.inArray(data.record.uid, $colleges) >= 0) {
$('#collegeSearchContainer').jtable('selectRows', data.row);
}
},
我认为应该需要以下内容。
- 即,您必须为列分配一个键
- 使用$(table_id).jtable('reload')
reload-将记录您的状态。
columnname: {
key: true,
list: false,
},