我希望在更新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);
}
};
答案 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来存储一个标志。