2015-10-15 48 views
0

如果条件为false,则if绑定将删除DOM并停止执行内部data-bind属性。KnockoutJS IF绑定 - 保留DOM

即使条件为false,是否可以保留DOM?我只是想停止执行data-bind当条件false但我不希望删除任何DOM由于JQuery的绑定等

+1

为什么你不能使用'visible'呢?你的'data-bind'是否使用自身执行操作的绑定处理程序,而不管“点击”或其他事件(它们不应该)? – haim770

+0

可见绑定不会停止执行元素内部的'data-bind'属性。我从一开始就将所有网站页面插入到DOM中。我适用于所有的绑定。一些页面包含我在开始时没有的数据。观察者是空的。在这种情况下,'data-bind'不应该被执行。首先当我从数据库中填充observable时,应该执行内部的'data-bind'绑定。 –

+1

如果您正在使用KO,则不应该依赖存储在DOM中的状态。所以你应该把你所有的jquery绑定移动到自定义的KO绑定中,在这种情况下,当'if'被评估为true时,你的jquery绑定将在数据绑定被评估时自动重新应用。 – nemesv

回答

1

我想出了以下解决方案,基本上到满足条件的延迟敲除结合应用。

当条件变为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); 
    } 
    } 
};