防止“with”绑定删除DOM元素(Knockout.js)

时间:2013-01-09 18:09:17

标签: dom knockout.js

Knockouters,

我已经开始依赖于with绑定来建立上下文嵌套。虽然我喜欢KO在某些情况下根据绑定元素的状态操纵DOM的方式,但有时我只想要在不删除DOM的情况下绑定含义。

有没有人知道是否有可能在单个元素绑定级别上阻止DOM操作?

谢谢, Vinney

1 个答案:

答案 0 :(得分:5)

with最初绑定到一个对象(或其他真值)时,Knockout的2.2版将不会清除DOM元素。或者,您可以使用我之前放在一起的withlight绑定。它只会绑定到一个对象(不是一个可观察的对象)。

ko.bindingHandlers['withlight'] = {
    'init': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var bindingValue = valueAccessor();
        if (typeof bindingValue != 'object' || bindingValue === null)
            throw new Error('withlight must be used with an object');
        var innerContext = bindingContext['createChildContext'](bindingValue);
        ko.applyBindingsToDescendants(innerContext, element);
        return { 'controlsDescendantBindings': true };
    }
};