Javascript knockoutjs:自定义绑定多次在错误的绑定上激发

Javascript knockoutjs:自定义绑定多次在错误的绑定上激发,javascript,knockout.js,Javascript,Knockout.js,我有一个关于自定义绑定的问题 这是你的电话号码 在这里,你可以看到我有4个自定义绑定…每个绑定都绑定到同一个布尔值,但每个绑定的触发方式不同 这是虫子吗 这个伟大的说是固定在3.x。。。我正在使用3.1.0,但它似乎没有被修复 我的具体问题是: 我想要一个自定义绑定,它只在模型更改时触发,而不在另一个绑定更改时触发。(四把小提琴) 只要看看小提琴,并运行它…它说一切;) 有人能给我解释一下这种行为吗? 谢谢 我猜调用allBindingsAccessor()将评估所有绑定,并将导致以后在每次

我有一个关于自定义绑定的问题

这是你的电话号码

在这里,你可以看到我有4个自定义绑定…每个绑定都绑定到同一个布尔值,但每个绑定的触发方式不同

这是虫子吗

这个伟大的说是固定在3.x。。。我正在使用3.1.0,但它似乎没有被修复

我的具体问题是: 我想要一个自定义绑定,它只在模型更改时触发,而不在另一个绑定更改时触发。(四把小提琴)

只要看看小提琴,并运行它…它说一切;)


有人能给我解释一下这种行为吗?
谢谢

我猜调用allBindingsAccessor()将评估所有绑定,并将导致以后在每次更改时调用更新。

ko.computed
中调用
update
函数,因此将观察您在该函数中读取的任何观察值。要实际“绑定”到可观察对象,需要在
update
函数中获取其值。通常这样做的方法如下:

var value = ko.unwrap(valueAccessor());
使用
ko.unwrap
允许灵活使用绑定,允许您提供可观察值或直接值(例如,来自表达式)

如果您在
update
函数中访问另一个绑定的值,则只要该值发生更改,您的绑定也会得到更新。您可以使用
peek
来避免这种情况

关于
allBindingsAccessor
,它在3.0中被更改为允许您更好地管理正在访问的绑定值

allBindings.get('value')

当然这就是你从小提琴上看到的。以及如何避免这种情况?正如本文所述:-“任何时候,作为此绑定的更新函数的前一次执行的一部分访问的可观察到的更改。绑定是使用计算的可观察值在内部实现的,所以任何访问其值的可观察值都会为绑定创建依赖项。”如果在
update
函数中访问
allBindingAccessors
value
,则无法避免此问题。您链接的帖子比我的旧。我的回答是3.XT中已经修复了这个问题。为了避免这个问题,我想你根本就不需要访问所有BindingSaccessor。如果需要更复杂的绑定,可以使用对象作为值。请参见模板绑定示例()。我想我已经在project中的视图模型中绑定了模板名称。这个答案为我节省了很多时间。你是最棒的,迈克尔·贝斯特。
var value = ko.unwrap(valueAccessor());
allBindings.get('value')