0

このスレッドの後、knockoutjs カスタム バインディングは機能していますが、更新機能は同じ列を再度クリックしたときに 1 回しか機能していません。関数を再度呼び出す方法は?

グーグルの後、私は見つけました

ko.cleanNode(element)

これを適用する方法は?何か案は?

ここにフィドルがあります

4

1 に答える 1

1

最後のsorByの状態を保存する必要があり、一致する場合はソート方向を反転します。

更新されたフィドルを参照してください: http://jsfiddle.net/tkirda/nHthh/4/

var lastSortBy = '';
var direction = 1;

ko.bindingHandlers.sortFunction = {
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
        var sortBy = ko.utils.unwrapObservable(valueAccessor());
        var items = viewModel.items;
        $(element).unbind('click.sort').bind('click.sort', function() {
            if (lastSortBy === sortBy){
                direction = direction === 1 ? -1 : 1;
            } else {
                direction = 1;
            }
            lastSortBy = sortBy;
            items.sort(function(a, b) {
                return direction * (a[sortBy]() < b[sortBy]() ? -1 : 1);
            });
        });
    }
}
于 2013-05-03T06:30:43.830 に答える