当需要Knockoutjs自定义绑定

时间:2015-05-15 14:02:04

标签: knockout.js ko-custom-binding

试图学习Knockoutjs.i找到了一个Knockoutjs自定义绑定相关代码,但这不是很好。

<input data-bind="value: name" />
<hr/>
<div data-bind="fadeInText: name"></div>

ko.bindingHandlers.fadeInText = {
    update: function(element, valueAccessor) {
        $(element).hide();
        ko.bindingHandlers.text.update(element, valueAccessor);
        $(element).fadeIn(); 
    } 
};

var viewModel = {
    name: ko.observable("Bob")
};

ko.applyBindings(viewModel);

我只是不明白人们何时进行自定义绑定?

1)如果可能的话,告诉我什么时候自定义绑定可以选择吗?

2)如果有人看到代码,那么他们可以理解自定义绑定fadeInText和viewModel没有关系,但它仍然有效。怎么样?

3)如果有多个视图模型,那么如何在绑定时指定带有绑定名称的viewmodel名称?

以上代码 http://jsfiddle.net/rniemeyer/SmkpZ/

的jsfiddle链接

4)如何在没有自定义绑定的情况下实现相同的输出?有可能吗?

请明智地回答我的问题。感谢

1 个答案:

答案 0 :(得分:4)

以下是一些答案:

  1. 自定义绑定在许多场景中都很有用,在我看来,不应该被用作最后的手段。无论何时您想以内置绑定尚未支持的方式连接DOM和数据,它们都是一个不错的选择。如上所述,here是一篇有助于澄清的文章。

  2. 自定义绑定通过调用ko.bindingHandlers.text.update间接与视图模型建立关系。因此,它有效地包装了实际的text绑定。 text绑定读取传入的值并显示。

  3. 对于多个视图模型,此answer描述了处理多个视图模型的一些选项。

  4. 如果没有自定义绑定,您可以选择不使用jQuery并使用CSS(考虑浏览器支持和前缀)。例如,您可以立即将类添加到如下元素:

  5. 使用CSS:

    .message {
        opacity: 0;
        transition: opacity 2s ease-in;
    }
    
    .load {
        opacity: 1;
    }
    

    该元素将以opacity: 0开头,并在2秒内立即转换为opacity: 1

    我不建议您直接在视图模型中使用jQuery。自定义绑定是这些场景可用的工具,并提供了Knockout提供的大部分功能。

    希望这有帮助。