Knockout.js 输出剔除可观察值,即使为false

Knockout.js 输出剔除可观察值,即使为false,knockout.js,Knockout.js,我正在使用一个名为this.expanded的敲除可观察对象来处理是否呈现一些HTML,还使用aria expanded属性中的值 <button data-bind="attr: { 'aria-expanded': expanded }"> <!-- ko if : expanded --> <div>...</div> <!-- /ko --> 当expanded为false时,如何仅使用false输出

我正在使用一个名为
this.expanded
的敲除可观察对象来处理是否呈现一些HTML,还使用
aria expanded
属性中的值

<button data-bind="attr: { 'aria-expanded': expanded }">
<!-- ko if : expanded -->
   <div>...</div>
<!-- /ko -->
expanded
为false时,如何仅使用
false
输出属性

我尝试创建一个次要变量,该变量将检查可观察对象并将其转换为字符串:

this.expandedStatus = this.expanded().toString()

但是我注意到,如果以这种方式使用,
expandedStatus
似乎不再更新/观察。

您可以简单地将
aria expanded
属性绑定到可观察对象的
toString()
值,而不引入新的可观察对象。请看下面的示例:

功能测试(){
var self=这个;
自我扩展=可观察(假);
self.toggleExpanded=函数(){
self.expanded(!self.expanded());
}
}
应用绑定(新测试())

...

切换

我最终找到了一个非常简单的解决方案,就是将aria设置为通过三元函数展开:

<button data-bind="attr: { 'aria-expanded': expanded() ? 'true' : 'false' }">

另一种方法是将绑定处理程序与jQuery一起使用,以获得如下更大的便利:

<button data-bind="isAriaExpanded: expanded ">
<!-- ko if : expanded -->
   <div>...</div>
<!-- /ko -->

谢谢你的解决方案!我最终找到了一个非常简单的方法来实现这一点,而不需要额外的功能(只是发布了答案)。
<button data-bind="isAriaExpanded: expanded ">
<!-- ko if : expanded -->
   <div>...</div>
<!-- /ko -->
ko.bindingHandlers.isAriaExpanded= {
    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
        jQuery(element).attr('aria-expanded',false);//initially setting to false
    },
    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
      value = valueAccessor();
      valueUnwrapped = ko.unWrap(value);
      jQuery(element).attr('aria-expanded',valueUnwrapped);//whenever the expanded() is changed automatically aria-expanded attribute gets updated
    }
};