我希望能够通过绑定到属性来创建绑定上下文,其方式与with
绑定的工作方式类似:
<div data-bind="with: myData">
<button data-bind="text: myHeader"></button>
</div>
但我不想使用with
因为每次button
更改时都会重新创建HTML元素(我的示例中为myData
),请参阅http://knockoutjs.com/documentation/with-binding.html :
如果您提供的表达式涉及任何可观察的值,则 只要有任何可观察的表达式,就会重新评估表达式 更改。然后,将清除子孙元素和新副本 标记的内容将添加到您的文档中并绑定在上下文中 新的评估结果。
所以我需要类似于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
with binding对于绑定嵌套非常方便 对象/模型,有助于保持数据绑定属性 变得过于冗长。然而,重要的是要了解这一点 带绑定将在绑定时重新呈现整个部分 价值变化。
KO中是否存在类似的内容?
答案 0 :(得分:-1)
我不认为文档的引用意味着你的想法。
如果您在with
绑定中使用的对象中存在可观察对象,并且这些可观察对象发生更改,那么具有with
绑定的元素的主体将不会被重新生成无条件地。
试试吧。运行此代码段并在计数器递增时输入input元素:
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
绑定指向一个observable,那个可观察的更改,那么该元素的主体将被重新呈现。
“如果您提供的表达式涉及任何可观察值,”指的是您为with
绑定提供的表达式。在您的情况下,表达式是单个值myData
。 myData
内是否有任何可观察的是完全不相关的。