Я создал функцию refreshJQuery()
, которая применяет все мои сложные действия за один раз. Затем я вызываю эту функцию, когда подписываюсь на наблюдаемые в моей модели представления, чтобы обновить мою модель. И один раз на странице загрузки.
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. .