Roy 的回答可能更好,但是是的,有一种方法可以防止将绑定应用于后代元素。为此,您需要一个自定义绑定,init该绑定返回:
return { controlsDescendantBindings: true };
您可以稍后使用
ko.applyBindingsToDescendants(bindingContext, element)
应用绑定。
例如像这样:
ko.bindingHandlers.myVisible = {
init: function(element, valueAccessor) {
var visible = ko.unwrap(valueAccessor());
if (visible) {
$(element).show();
$(element).data('bindingsApplied', true);
} else {
$(element).hide();
$(element).data('bindingsApplied', false);
return { controlsDescendantBindings: true };
}
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var visible = ko.unwrap(valueAccessor());
if (visible) {
if (!$(element).data('bindingsApplied')) {
ko.applyBindingsToDescendants(bindingContext, element);
$(element).data('bindingsApplied', true);
}
$(element).show();
} else {
$(element).hide();
}
}
}
小提琴
文档