我創建了一個refreshJQuery()
函數,可以一次性應用我所有的強壯行爲。當我在我的視圖模型中訂閱observables來更新我的模型時,我會調用這個函數。並在頁面加載一次。
function refreshJQuery() {
$(".draggable, .droppable, .resizable").each(function() {
var $element = $(this);
if ($element.hasClass("draggable") && !$element.data("init-draggable")) {
$element.data("init-draggable", true).draggable(dragBehavior);
}
if ($element.hasClass("droppable") && !$element.data("init-droppable")) {
$element.data("init-droppable", true).droppable(dropBehavior);
}
if ($element.hasClass("resizable") && !$element.data("init-resizable")) {
$element.data("init-resizable", true).resizable(resizeBehavior);
$(this).children().fadeTo(2000, 0);
$element.hover(function() {
$(this).children().fadeTo(200, 1);
},
function() {
$(this).children().fadeTo(750, 0);
});
}
});
};
然後我用它如下,雖然我已經確定了其他2個觀測我需要從還調用這個函數:
this.updateTime = function() {
service.updateBookingTimes(this.id(), this.startDate(), this.endDate());
refreshJQuery();
};
this.startDate.subscribe(this.updateTime, this);
this.endDate.subscribe(this.updateTime, this);
我也實現@ RPNiemeyer的字段級的JQuery解決方案訂閱,所以除了他的日期選擇器樣本外,我還有類似的代碼,它可以重新應用$.button()
到<a>
標籤,另一個將複選框轉換爲iPhone風格的開關。
你能解釋一下你的情況嗎?通常,您將使用綁定到可觀察對象的自定義綁定。當這個observable發生變化時,綁定會運行任何jQuery UI代碼對綁定所在的元素都是必需的。有一種方法可以做你正在問的東西,但是我想在提出這個用例之前先聽聽更多關於這個用例的信息,因爲這不是正常的方法。 – 2012-02-08 03:01:41
更新了我的主帖:可以說我總是希望在所有帶有類'needsdate'的文本框上使用JQuery datepicker,而不是將其添加到每個視圖模型中,如果我可以在全局範圍內執行它,那將非常棒。 這有幫助嗎? – RodH257 2012-02-08 07:19:16
如果你沒有綁定到視圖模型,那麼可能你不需要爲此敲除。 – 2012-02-08 07:25:02