2013-01-09 84 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

我明白了。但是,您的視圖功能決定了您的模型。您是否考慮允許觀察對象並解開它以獲得相同的結果?我不是在挑戰你的設計,而是在理解我自己想念的東西。 –