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
}
};