Javascript 使用jQuery slideUp/slideDown删除自定义绑定时的奇怪行为

Javascript 使用jQuery slideUp/slideDown删除自定义绑定时的奇怪行为,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我需要用敲除控制一些可折叠面板(面板的数量是可变的,但在会话期间不会改变) 我已在布尔数组中设置面板状态(打开/关闭),并使用自定义绑定显示/隐藏带有jQuery动画的面板: ko.bindingHandlers.collapse = { update: function (element, valueAccessor) { if (valueAccessor()) { $(element).slideDown(); } else

我需要用敲除控制一些可折叠面板(面板的数量是可变的,但在会话期间不会改变)

我已在布尔数组中设置面板状态(打开/关闭),并使用自定义绑定显示/隐藏带有jQuery动画的面板:

ko.bindingHandlers.collapse = {
    update: function (element, valueAccessor) {
        if (valueAccessor()) {
            $(element).slideDown();
        } else {
            $(element).slideUp();
        }
    }
};
如果我以这种方式定义数组,则everythings可以工作:

myModel.collapseOpened = ko.observableArray([
    ko.observable(true),
    ko.observable(false),
    ko.observable(false)
]);

但我不需要所有这些可观察的,所以我会用以下方式定义数组:

myModel.collapseOpened = ko.observable([
    true,false,false
]);
但是如果我这样做,jQuery会有一个奇怪的行为:设置和取消设置
显示:none
,但没有动画,除了最后一个面板上的
slideup()
(!!!)


大家能给我解释一下为什么吗?谢谢

剔除只会记录可观察值的变化。您不需要所有嵌套的可观察对象,可观察数组中的值会自动作用。下面的方法非常有效

myModel.collapseOpened = ko.observableArray([ true,false,false ]);

不能使用可观察对象来存储数组,因此这就是为什么存在可观察数组…

请看一下我的选项卡示例,这是一种更具MVVM的解决方法。它可以很容易地转换为幻灯片向下试一试这里的演示
valueAccessor()
将为您提供可观察的<代码>valueAccessor()()需要获取内部的值。很抱歉,作为我的第二个示例,这是“坏”的。试试小提琴。问题在于jQuery。使用observable调用更新函数,但jQuery响应“坏”(动画不平滑)。@xonya,啊,好的,我现在明白了。我将很快更新我的答案:)