2013-01-09 86 views
4

Knockouters,防止“绑定”去除DOM元素(Knockout.js)

我已经开始依赖绑定来建立上下文嵌套。虽然我喜欢KO在某些情况下基于绑定元素的状态来操纵DOM的方式,但有时候我只是希望在不去除DOM的情况下实现绑定。

有谁知道是否有可能防止单个元素绑定级别上的DOM操作吗?

由于敲除的, Vinney

+1

什么版本的Knockout你有?它应该固定在2.2 –

+0

的确,我有2.1.0。我会研究更新。但是,你可以扩展“固定”的含义吗?一个添加的配置/参数?另外,请回答我的答案,以便我可以在适当的情况下接受您的回答。 –

+0

@Slawek我对你的评论有点困惑。我认为实际的DOM操作是一个Knockout错误。尽管如此,文档另有说明。那么“固定”是什么意思?是否有一些DOM操作实际发生错误的实例?如果是这样,你能解释一下吗?我的对象是非null,但它包含的所有成员都是null。这是否应该触发删除相关元素?谢谢! –

回答

5

版2.2+不会清除时with最初绑定到一个对象(或其它truthy值)的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 }; 
    } 
}; 
+0

感谢您的输入!有趣的绑定处理程序。我很想知道你用这个解决了什么问题......谨慎解释? –

+0

我想要一个绑定,只做了没有任何模板功能的上下文更改。所以就是这样。 –

+0

我明白了。但是,您的视图功能决定了您的模型。您是否考虑允许观察对象并解开它以获得相同的结果?我不是在挑战你的设计,而是在理解我自己想念的东西。 –