试图学习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)如何在没有自定义绑定的情况下实现相同的输出?有可能吗?
请明智地回答我的问题。感谢
答案 0 :(得分:4)
以下是一些答案:
自定义绑定在许多场景中都很有用,在我看来,不应该被用作最后的手段。无论何时您想以内置绑定尚未支持的方式连接DOM和数据,它们都是一个不错的选择。如上所述,here是一篇有助于澄清的文章。
自定义绑定通过调用ko.bindingHandlers.text.update
间接与视图模型建立关系。因此,它有效地包装了实际的text
绑定。 text
绑定读取传入的值并显示。
对于多个视图模型,此answer描述了处理多个视图模型的一些选项。
如果没有自定义绑定,您可以选择不使用jQuery并使用CSS(考虑浏览器支持和前缀)。例如,您可以立即将类添加到如下元素:
使用CSS:
.message {
opacity: 0;
transition: opacity 2s ease-in;
}
.load {
opacity: 1;
}
该元素将以opacity: 0
开头,并在2秒内立即转换为opacity: 1
。
我不建议您直接在视图模型中使用jQuery。自定义绑定是这些场景可用的工具,并提供了Knockout提供的大部分功能。
希望这有帮助。