Knockout:突出显示可观察更新的元素

时间:2013-08-04 15:25:16

标签: knockout.js

我希望在更新observable时突出显示绑定到observable的元素,而不是在observable的绑定被引入时突出显示。

我尝试使用自定义绑定:

<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);

但更新回调不仅在更新observable时运行,而且在自定义绑定的init处运行。因此,在绑定的init处有一个不需要的元素突出显示。

我可以知道,在更新回调中,如果我是绑定的init,以便执行以下操作吗?

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

1 个答案:

答案 0 :(得分:3)

一种简单的方法是使用Knockouts ko.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来存储一个标志。