savesort ウィジェットで tablesorter を使用しようとしています。テーブルは knokout によって取り込まれます。
テーブルに初めてデータが入力されると、正しい量の行が取得され、並べ替えが記憶されます。次に、ajax とノックアウト配列へのバインドを使用して、テーブルにデータを再入力します。データは 2 倍になりますが、ノックアウト (正しく) は半分のデータしか追跡しません。
これまでのところ、このメソッドで保存された並べ替えを適用するまで追跡しました。
self.tablesorter = function () {
$('table.tablesorterTranslation').trigger("update");
setTimeout(function () {
var sl = $.tablesorter.storage($('table.tablesorterTranslation'), 'tablesorter-savesort');
var sortList = (sl && sl.hasOwnProperty('sortList') && $.isArray(sl.sortList)) ? sl.sortList : '';
if (sortList && sortList.length > 0) {
// update sort change
$('table.tablesorterTranslation').trigger("sorton", [sortList]);
}
}, 1000);
return false;
};
このメソッドは、ノックアウト ポストアクション バインディングによって呼び出されます。
メソッドが呼び出される前は、ノックアウト配列内のすべての項目に対して 1 つの tablerow があり、postaction 後は 2 つあり、1 つはノックアウトによって追跡され、もう 1 つは tablesorter によって追加されたようです。
これはテーブルソーターのキャッシュ値によるものですか?それをきれいにする方法はありますか?
html:
<table class="tablesorterTranslation" data-bind="visible: contents().length > 0">
<colgroup>
<col class="referencenumber"/>
<col class="title"/>
</colgroup>
<thead>
<tr>
<th class="referencenumber">Ref number</th>
<th class="title">Title</th>
</tr>
</thead>
<tbody data-bind="foreach: contents, postAction: tablesorter(), visible: contents().length > 0">
<tr>
<td class="referencenumber">
<span data-bind="text: contentReferenceNumber"></span>
</td>
<td class="title">
<a data-bind="attr: {href: previewUrl, title: previewTitle}, click: previewpopup" class="preview_translation"><%: AdminResources.Menu_Preview %></a>
</td>
</tr>
</tbody>
</table>
テーブルを再作成する ajax:
self.setContentList = function () {
if ($('#LanguageIdNameValuePairs option').length > 0) {
self.contents.removeAll();
self.loading(true);
$.ajax('<%= Url.Action("GetContentList", "TranslateContentMenu") %>',
{
dataType: 'json',
data: {
languageId: $('#LanguageIdNameValuePairs').val(),
page: self.page
},
success: function (allData) {
var mappedContent = $.map(allData, function (item) { return new ContentViewModel(item); });
self.loading(false);
self.contents(mappedContent);
}
});
} else {
self.contents(new Array());
}
};
コンテンツビューモデル:
(function (ko) {
PODIUM.translation.ContentViewModel = function(data) {
this.contentReferenceId = ko.observable(data.contentReferenceId);
this.contentName = data.contentName;
this.previewUrl = ko.observable(data.previewUrl);
this.previewTitle = ko.observable(data.previewTitle);
this.publishTitle = ko.observable(data.publishTitle);
this.contentReferenceNumber = ko.observable(data.contentReferenceNumber);
};
}(ko));
最後に、テーブルにデータを入力し、savesort を使用して tablesort を定義します (savesort が問題だと思います)。
$('#OptionsMenu').change(function () {
viewModel.setContentList();
});
$('table.tablesorterTranslation').tablesorter({
widgets: ["saveSort"],
widgetOptions: {}
});
いくつかの値を持つ選択リストがあり、これが変更されると、サーバーから新しい値を取得してテーブルを再作成します。これは古い値を記憶する場所ですが、テーブルを「クリーン」にして最初からやり直したいです。