這種方法創建一個計算觀察到的,看起來布爾觀察到,以確定要顯示的文字。
這裏有一個工作jsfiddle。http://jsfiddle.net/yq5rS/10/
而這裏的代碼進行快速的想法
的Html
<div class='liveExample'>
<p>
<label>
<input type='checkbox' data-bind='checked: display' />
Active?
</label>
</p>
<p data-bind='fadeVisible: IsActive()'></p>
</div>
腳本
var Model = function() {
var self = this;
self.display= ko.observable(false);
self.IsActive = ko.computed(function() {
if (self.display()) return "Active."
return "Not active."
});
};
ko.bindingHandlers.fadeVisible = {
init: function(element, valueAccessor) {
var value = valueAccessor();
$(element).hide().html(ko.utils.unwrapObservable(value)).fadeIn();
},
update: function(element, valueAccessor) {
var value = valueAccessor();
$(element).hide().html(ko.utils.unwrapObservable(value)).fadeIn();
}
};
ko.applyBindings(new Model());
編輯
我最初的反應並沒有淡出,等待,然後褪色回去。這裏是一個更新的fadeVisible結合處理
ko.bindingHandlers.fadeVisible = {
update: function(element, valueAccessor) {
var value = valueAccessor();
$(element).fadeOut('slow', function() {
$(element).html(ko.utils.unwrapObservable(value)).fadeIn();
});
}
};
你真的沒有指定你想要* *發生。你想在所有綁定元素顯示之前隱藏所有綁定元素嗎?你想讓它們同時滑入/滑出,但光滑嗎? – Tyrsius 2012-07-26 15:53:58
這可能是純粹的猜想,但我相信他希望動畫能夠連續運行。所以他們需要訂購,一個隱藏,然後其他展示,反之亦然。 – Josh 2012-07-26 17:23:04
的確如此 - 正是喬希。編輯完成:-) – RasmusKL 2012-07-26 18:38:07