我想创建一个“fadeInIf”自定义绑定(bind)。我的想法等于来自: http://knockoutjs.com/examples/animatedTransitions.html 的“fadeVisible” :
// Here's a custom Knockout binding that makes elements shown/hidden via jQuery's fadeIn()/fadeOut() methods
// Could be stored in a separate utility library
ko.bindingHandlers.fadeVisible = {
init: function(element, valueAccessor) {
// Initially set the element to be instantly visible/hidden depending on the value
var value = valueAccessor();
$(element).toggle(ko.utils.unwrapObservable(value)); // Use "unwrapObservable" so we can handle values that may or may not be observable
},
update: function(element, valueAccessor) {
// Whenever the value subsequently changes, slowly fade the element in or out
var value = valueAccessor();
ko.utils.unwrapObservable(value) ? $(element).fadeIn() : $(element).fadeOut();
}
};
我对自定义绑定(bind)还很陌生,但认为它可能是这样的:
ko.bindingHandlers.fadeInIf = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var value = valueAccessor();
$(element).toggle(ko.utils.unwrapObservable(value));
ko.bindingHandlers.if.init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var value = valueAccessor();
if (ko.utils.unwrapObservable(value))
$(element).fadeIn();
ko.bindingHandlers.if.update(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
}
};
我已经有了“fadeVisible”功能,但无法解决这个问题,我错过了什么?
最佳答案
谢谢你的建议。 我终于让它工作了,我错过了 controlsDescendantBindings选项。结果如下:
ko.bindingHandlers.fadeIf = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var value = valueAccessor();
$(element).toggle(ko.utils.unwrapObservable(value));
ko.bindingHandlers['if'].init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
return { controlsDescendantBindings: value };
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var value = valueAccessor();
if (ko.utils.unwrapObservable(value)) {
ko.bindingHandlers['if'].update(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
$(element).fadeIn();
}
else {
$(element).fadeOut(200, function () {
ko.bindingHandlers['if'].update(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
});
}
}
};
关于javascript - 可以在 Knockout 中创建自定义 if 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16483267/