自定义绑定只调用一次

时间:2013-05-03 05:34:13

标签: javascript jquery knockout.js

在此thread之后,knockoutjs自定义绑定正在运行,但更新功能仅在再次单击同一列时才起作用。如何再次调用该函数?

谷歌搜索后我找到了

ko.cleanNode(element)

如何申请?有什么想法吗?

以下是fiddle

1 个答案:

答案 0 :(得分: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);
            });
        });
    }
}