javascript - knockout 绑定(bind)不初始化,从更新开始

标签 javascript data-binding initialization knockout.js

我有这两个绑定(bind),它们使用相同的初始化代码,并绑定(bind)到相同的值,但它们的初始化不同。第一个行为正常,第二个运行它的更新而不是 init。以下是绑定(bind):

    function initToggle(element, valueAccessor) {
    // Initially set the element to be instantly visible/hidden depending on the value
    var value = valueAccessor();
    $(element).toggle(ko.utils.unwrapObservable(value)); // Use "unwrapObservable" so we can handle values that may or may not be observable
};

//Binding Handlers
ko.bindingHandlers.fadeVisible = {
    init: initToggle,
    update: function (element, valueAccessor) {
        // Whenever the value subsequently changes, slowly fade the element in or out
        var value = valueAccessor();
        ko.utils.unwrapObservable(value) ? $(element).fadeIn() : $(element).fadeOut();
    }
};

ko.bindingHandlers.slideVisibleVertical = {
    init: initToggle,
    update: function(element, valueAccessor, allBindingsAccessor) {        
        var value = valueAccessor(); //Lastest binding value
        var allBindings = allBindingsAccessor(); //other bindings, allows options

        var valueUnwrapped = ko.utils.unwrapObservable(value); 
        var duration = allBindings.slideDuration || 400; // 400ms is default duration unless otherwise specified

        if (valueUnwrapped == true)
             $(element).show('slide', {direction: 'up'}, duration);
        else
            $(element).hide('slide', {direction: 'up'}, duration);
    }
};

从字面上看,相同的初始化函数。这是 a fiddle显示两个按钮,都绑定(bind)到相同的值。 fadeVisible 开始时如图所示,但 slidevisibleVertical 滑入。两者在更新时都具有动画效果。有人知道这里发生了什么吗?

最佳答案

update 函数也总是在第一次运行。

对于您的 fadeVisible 元素将已经可见,因此淡入不会执行任何操作。

对于调用 slide 的其他绑定(bind),即使显示了它,它仍会为其设置动画。

一些不同的处理方式:

  • 在元素 ($data) 上存储一些内容以指示您处于第一遍并在更新结束时将其清除(反之亦然)
  • 滑动前检查可见性(正如您在评论中提到的)

关于javascript - knockout 绑定(bind)不初始化,从更新开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922599/

相关文章:

javascript - XmlHttpRequest 请求失败时获取回调响应

swift - 以编程方式创建 SKScene 子类,没有大小信息?

c - C 中指向无效位置错误的指针

c++ - 在 C++ 中从模板创建对象

javascript - jqGrid:列调整大小触发点击事件

javascript - Promise 执行器中的 `resolve` 和 `reject` 函数

javascript - Zombie.js jQuery 加载错误 'j.getClientRects is not a function'

javascript - 与 Angular Directive(指令) Controller 的两种方式数据绑定(bind)

.net - WPF BooleanToVisibilityConverter 在 false 时转换为隐藏而不是折叠?

c# - 从 ItemsControl 绑定(bind)到父 DataTemplate 属性