1

我想在更新可观察对象时突出显示绑定到可观察对象的元素,但在初始化可观察对象的绑定时不突出显示。

我尝试使用自定义绑定:

<div data-bind="updateHighlighting: name, text: name"></div>
<input data-bind="value: name" />

ko.bindingHandlers.updateHighlighting = {
    update: function(element, valueAccessor) {
        $(element).effect("highlight", 2000);
    }
};

var vm = {
    name: ko.observable("Diego")
};

ko.applyBindings(vm);

但是更新回调不仅在可观察对象更新时运行,而且在自定义绑定的初始化时运行。所以在绑定的初始化处有一个不需要的元素突出显示。

我可以知道,在更新回调中,我是否处于绑定的初始位置以便执行以下操作?

ko.bindingHandlers.updateHighlighting = {
    update: function(element, valueAccessor) {
        if(!isInit)
            $(element).effect("highlight", 2000);
    }
};
4

1 回答 1

3

一种简单的方法是使用 Knockoutsko.utils.domData函数,例如:

ko.bindingHandlers.updateHighlighting = {
    update: function(element, valueAccessor) {
        var key = "_my_init_key_",
            isInit = ko.utils.domData.get(element, key);

        if(isInit) {
            $(element).effect("highlight", 2000);
        }
        else {
            ko.utils.domData.set(element, key, true);
        }
    }
};

这实际上只是在元素上设置了一个 expando 属性,因此使用它来保持状态。如果您使用 API,Knockout 在删除元素时会清理它,尽管在存储原语时这没什么大不了的。

由于您使用的是 jQuery,因此您也可以使用 $.data 来存储标志。

于 2013-08-04T15:49:34.800 回答