Javascript 使用knockout.js进行可见性样式绑定失败

Javascript 使用knockout.js进行可见性样式绑定失败,javascript,jquery,css,knockout.js,visibility,Javascript,Jquery,Css,Knockout.js,Visibility,此样式绑定使用knockout成功,如下所示失败 data-bind="style : { display : repeat() === 'Custom' ? 'block' : 'none' }" 为什么? 我可以使用可见绑定,但在我的情况下,我不想丢失div空间,即使它是隐藏的 我怎样才能做到这一点 我不想使用jquery实现这一点,因为我已经成功地使用了它。使用css绑定可能会更好。您还可以使用计算的可观察对象来整理整个内容 data-bind="style : { visibility

此样式绑定使用knockout成功,如下所示失败

data-bind="style : { display : repeat() === 'Custom' ? 'block' : 'none' }"
为什么?

我可以使用可见绑定,但在我的情况下,我不想丢失div空间,即使它是隐藏的

我怎样才能做到这一点


我不想使用jquery实现这一点,因为我已经成功地使用了它。

使用
css
绑定可能会更好。您还可以使用
计算的
可观察对象来整理整个内容

data-bind="style : { visibility : repeat() === 'Custom' ? 'visible' : 'hidden' }"
您的绑定现在是这样简单的
databind=“css:{hide:hidden}”

在CSS中,提供以下类:

self.hidden = ko.computed(function() {
    return self.repeat() !== 'Custom';
})

解决此问题的另一个选择是创建自己的绑定。这听起来很难,但实际上很容易,而且KO的设计考虑到了定制绑定。我希望基本包中有更多,但它们的创建非常简单。此解决方案的优点是绑定简单易读。以下是一个名为“隐藏”的示例:

.hide {
    visibility: 'hidden';
}
并在HTML中用作:

ko.bindingHandlers.hidden = (function() {
    function setVisibility(element, valueAccessor) {
        var hidden = ko.unwrap(valueAccessor());
        $(element).css('visibility', hidden ? 'hidden' : 'visible');
    }
    return { init: setVisibility, update: setVisibility };
})();

我只是做了一些非常相似的事情,这对我很有用:

data-bind="hidden: !repeat()"

不同之处在于将
可见性设置为
'
而不是
可见

这对我来说很有效,使用
可见性使div仅在页面加载后可见:

data-bind="style : { visibility : repeat() === 'Custom' ? '' : 'hidden' }"

...

在样式绑定中使用Visibly应该可以正常工作。请参见此示例中的:。因此,请创建一个JSFIDLE来演示您的问题@nemesv击败了我,但我将发布我的小提琴,以显示它的工作原理:一定是css中的其他东西或击倒导致它失败
<div style="visibility:hidden" data-bind="style: {visibility: 'visible'}">
    ...
</div>