2016-07-06 39 views
0

我希望能夠通過結合屬性創建綁定上下文,以類似的方式如何with綁定工作:組結合上下文屬性

<div data-bind="with: myData"> 
     <button data-bind="text: myHeader"></button> 
</div> 

但我不希望使用with因爲它重新創建HTML元素(在我的例子button)每次myData更改,請參閱http://knockoutjs.com/documentation/with-binding.html

如果提供了表達涉及任何觀察到的值,則 表達將重新評估W¯¯沒有任何這些可觀察到的變化 。然後,後代元素將被清除,標記的新副本 將被添加到您的文檔中並綁定到新評估結果的上下文 中。

所以我需要類似with結合的東西,比方說,一個context結合:

<div data-bind="context: myData"> 
     <button data-bind="text: myHeader"></button> 
</div> 

<button>現在被綁定到myData背景,所以我沒有寫:

<div> 
     <button data-bind="text: myData().myHeader"></button> 
</div> 

這也描述在 http://www.knockmeout.net/2012/03/knockoutjs-performance-gotcha-1ifwith.html

帶綁定對綁定對象/模型非常方便,並有助於保持 的數據綁定屬性變得過於冗長。然而,理解具有綁定的 將重新呈現整個部分,只要其綁定的 值發生更改就很重要。

這樣的事情存在於KO嗎?

回答

-1

我不認爲來自文檔的引用意味着您認爲它的作用。

如果有您在with使用綁定的對象觀測,這些觀測值改變,那麼具有的with綁定不會無條件重新呈現的元素的身體。

試試吧。運行這段代碼並輸入到輸入元件,而計數器遞增:

var vm = { 
 
    sample: { 
 
    counter: ko.observable(0) 
 
    } 
 
}; 
 

 
ko.applyBindings(vm); 
 

 
setInterval(function() { 
 
    vm.sample.counter(vm.sample.counter() + 1); 
 
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<div data-bind="with: sample"> 
 
    <input type="text" value="type here"> 
 
    <div>Counter: <span data-bind="text: counter"></span><div> 
 
</div>

什麼文件是指:如果with結合點,可觀察到的,並觀察到的變化,那麼,元素的主體將被重新渲染。 「

」如果您提供的表達式涉及任何可觀察的值,「指的是您給予with綁定的表達式。在你的情況下,表達式是一個單一的值,myDatamyData裏面是否有任何可觀察的是完全不相關的。