自定义淡入淡出可见性绑定
此示例实现了一个切换可见性的自定义绑定(类似于现有的可见绑定 ),但将利用 jQuery 的淡化 API 来动画从可见到隐形的转换。
自定义绑定定义:
//Add a custom binding called "fadeVisible" by adding it as a property of ko.bindingHandlers
ko.bindingHandlers.fadeVisible = {
//On initialization, check to see if bound element should be hidden by default
'init': function(element, valueAccessor, allBindings, viewModel, bindingContext){
var show = ko.utils.unwrapObservable(valueAccessor());
if(!show){
element.style.display = 'none';
}
},
//On update, see if fade in/fade out should be triggered. Factor in current visibility
'update': function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var show = ko.utils.unwrapObservable(valueAccessor());
var isVisible = !(element.style.display == "none");
if (show && !isVisible){
$(element).fadeIn(750);
}else if(!show && isVisible){
$(element).fadeOut(750);
}
}
}
使用 fadeVisible 绑定的示例标记:
<div data-bind="fadeVisible: showHidden()">
Field 1: <input type="text" name="value1" />
<br />
Field 2: <input type="text" name="value2" />
</div>
<input data-bind="checked: showHidden" type="checkbox"/> Show hidden
示例视图模型:
var ViewModel = function(){
var self = this;
self.showHidden = ko.observable(false);
}
ko.applyBindings(new ViewModel());