Knockout.js 敲除模板绑定丢失状态

Knockout.js 敲除模板绑定丢失状态,knockout.js,knockout-templating,Knockout.js,Knockout Templating,我正在使用模板绑定来呈现一组单选按钮。元素上还有一个css绑定 单击单选按钮时,将更新viewmodel&view,但单选按钮的选中状态将丢失。这有什么办法吗 问题在于检查绑定和值绑定的顺序。选中的绑定使用元素的值来确定是否应该选中它。当元素第一次绑定时,值是在选中的绑定初始化后由值绑定设置的。因此,最简单的修复方法是重新排序绑定。另外,我建议您使用attr绑定而不是value,因为value有额外的开销,它是为文本框设计的双向绑定 data-bind="attr: {value: $data}

我正在使用模板绑定来呈现一组单选按钮。元素上还有一个css绑定

单击单选按钮时,将更新viewmodel&view,但单选按钮的选中状态将丢失。这有什么办法吗


问题在于检查绑定和值绑定的顺序。选中的绑定使用元素的值来确定是否应该选中它。当元素第一次绑定时,值是在选中的绑定初始化后由值绑定设置的。因此,最简单的修复方法是重新排序绑定。另外,我建议您使用attr绑定而不是value,因为value有额外的开销,它是为文本框设计的双向绑定

data-bind="attr: {value: $data}, checked: $parent.value"

除注释中提到的呈现问题外,Knockout 3.0还修复了顺序问题,因此这是解决此问题的另一种方法。

问题在于选中绑定和值绑定的顺序。选中的绑定使用元素的值来确定是否应该选中它。当元素第一次绑定时,值是在选中的绑定初始化后由值绑定设置的。因此,最简单的修复方法是重新排序绑定。另外,我建议您使用attr绑定而不是value,因为value有额外的开销,它是为文本框设计的双向绑定

data-bind="attr: {value: $data}, checked: $parent.value"

除了注释中提到的呈现问题外,Knockout 3.0还修复了顺序问题,因此这是解决此问题的另一种方法。

奇怪的是,如果您使用模板的foreach选项,它会工作:顺便说一句,如果您在标签上单击两次,它在您的示例中也会工作。如果您使用复选框es,它也不会工作:。在这一点上,我想说您已经发现了一个bug,但它似乎在3.0版中得到了修复:因此您应该升级到3.0 beta版,或者使用我之前评论中的解决方法。我认为这可能与所有绑定每次都会重新评估这一事实有关。如果是这样的话,也许淘汰3.0版会解决这个问题。@nemesv你应该加上它作为答案。这肯定是一个bug。@nemesv它与foreach一起工作,因为如果数据相同,它不会重新渲染,但对于数据,它会重新渲染。但根本原因是,在3.0之前,元素的所有绑定都一起更新。奇怪的是,如果使用模板的foreach选项,它会工作:顺便说一句,如果在标签上单击两次,它在示例中也会工作。如果使用复选框es,它也不会工作:。在这一点上,我想说您已经发现了一个bug,但它似乎在3.0版中得到了修复:因此您应该升级到3.0 beta版,或者使用我之前评论中的解决方法。我认为这可能与所有绑定每次都会重新评估这一事实有关。如果是这样的话,也许淘汰3.0版会解决这个问题。@nemesv你应该加上它作为答案。这肯定是一个bug。@nemesv它与foreach一起工作,因为如果数据相同,它不会重新渲染,但对于数据,它会重新渲染。但是,根本原因是在3.0之前,一个元素的所有绑定都一起更新。