KnockoutJS IF绑定 - 保留DOM
问题描述:
如果条件为false
,则if
绑定将删除DOM并停止执行内部data-bind
属性。KnockoutJS IF绑定 - 保留DOM
即使条件为false
,是否可以保留DOM?我只是想停止执行data-bind
当条件false
但我不希望删除任何DOM由于JQuery的绑定等
答
我想出了以下解决方案,基本上到满足条件的延迟敲除结合应用。
当条件变为false
时,它不会删除绑定,但在我的情况下这不是必需的。
ko.bindingHandlers['applyWhen'] = {
init: function() {
return { controlsDescendantBindings: true };
},
update: function(element, valueAccessor, allBindings, model, bindingContext) {
if (!element.bindingApplied && Boolean(ko.unwrap(valueAccessor()))) {
element.bindingApplied = true;
ko.applyBindingsToDescendants(bindingContext, element);
}
}
};
为什么你不能使用'visible'呢?你的'data-bind'是否使用自身执行操作的绑定处理程序,而不管“点击”或其他事件(它们不应该)? – haim770
可见绑定不会停止执行元素内部的'data-bind'属性。我从一开始就将所有网站页面插入到DOM中。我适用于所有的绑定。一些页面包含我在开始时没有的数据。观察者是空的。在这种情况下,'data-bind'不应该被执行。首先当我从数据库中填充observable时,应该执行内部的'data-bind'绑定。 –
如果您正在使用KO,则不应该依赖存储在DOM中的状态。所以你应该把你所有的jquery绑定移动到自定义的KO绑定中,在这种情况下,当'if'被评估为true时,你的jquery绑定将在数据绑定被评估时自动重新应用。 – nemesv