Ну простой ответ, что «Нет, я не могу легко порт моя реализация Молоток 1.x до 2,0».
Ниже приведен фрагмент одного из моих файлов JSP HTPC, который добавляет действия к <div>
, содержащим список телевизионных программ EPG. Это очень хорошо работает с 1.x.
var listingsHammer = null;
function AddListingsHammerActions() {
$("#guideBrowserItems").each(function() {
var h = $(window).height() - 24
var t = $(this).offset().top
console.log("#guideBrowserItems h=" + h + "; t=" + t + " => " + (h - t))
$(this).height(h - t)
});
if (!listingsHammer) {
listingsHammer = $(".guideBrowserItems").hammer({ prevent_default: true });
}
EnableDragScroll(listingsHammer)
listingsHammer.on("tap", ".guideEpgProgramme", function (e) {
var programItem = this;
$(".guideEpgProgrammeDescription").remove();
$(".guideEpgProgrammeCancel").remove();
$(".guideEpgProgrammeRecord").remove();
$(".guideEpgProgrammeRecordSeries").remove();
$.ajax({
url: "/Guide/Description?id=" + programItem.id,
success: function (description) {
if (hasClass(programItem, "guideEpgProgrammeScheduled")) {
$(programItem).prepend('<img class="guideEpgProgrammeCancel" id="' + programItem.id + '" src="/Content/Buttons/SmallRound/Exit.png" />')
} else {
$(programItem).prepend('<img class="guideEpgProgrammeRecordSeries" id="' + programItem.id + '" src="/Content/Buttons/SmallRound/Transport.Rec.Series.png" />')
$(programItem).prepend('<img class="guideEpgProgrammeRecord" id="' + programItem.id + '" src="/Content/Buttons/SmallRound/Transport.Rec.png" />')
}
$(programItem).append('<div class="guideProgrammeInfo guideEpgProgrammeDescription">' + description + '</div>')
cache: false
}
})
});
listingsHammer.on("tap", ".guideEpgProgrammeRecord", function (e) {
var programItem = this;
$.ajax({
url: "/Guide/Record?id=" + programItem.id,
success: function (error) {
if (error == "") {
$(".guideSelectorItems").html("")
ReplacePane("guideBrowserItems", "/Guide/ListingsPane?mode=GuideSchedule", "none")
}
else {
alert(error)
}
cache: false
}
})
});
listingsHammer.on("tap", ".guideEpgProgrammeRecordSeries", function (e) {
var programItem = this;
$.ajax({
url: "/Guide/RecordSeries?id=" + programItem.id,
success: function (error) {
if (error == "") {
$(".guideSelectorItems").html("")
ReplacePane("guideBrowserItems", "/Guide/ListingsPane?mode=GuideSchedule", "none")
}
else {
alert(error)
}
cache: false
}
})
});
listingsHammer.on("tap", ".guideEpgProgrammeCancel", function (e) {
var programItem = this;
$.ajax({
url: "/Guide/Cancel?id=" + programItem.id,
success: function (error) {
if (error == "") {
$(".guideSelectorItems").html("")
ReplacePane("guideBrowserItems", "/Guide/ListingsPane?mode=GuideSchedule", "none")
}
else {
alert(error)
}
cache: false
}
})
});
listingsHammer.on("tap", ".guideEpgSeriesCancel", function (e) {
var seriesItem = this;
$.ajax({
url: "/Guide/CancelSeries?id=" + seriesItem.id,
success: function() {
$(".guideSelectorItems").html("")
ReplacePane("guideBrowserItems", "/Guide/ListingsPane?mode=GuideSeries", "none")
cache: false
}
})
});
}
Есть несколько вещей, которые следует учитывать.
Я использую только один молот для всего <div>
с делегацией каждый из отдельных guideEpgProgramme
подэлементам, так что, когда я прикасаюсь к перечисленным программам, обработчик действует на этом одном подэлементе.
Это позволяет мне динамически заменять содержимое <div>
через Ajax (например, для другого канала), без необходимости перерегистрации обработчиков.
Изображения кнопки «Запись» и «Отмена» динамически добавляются и удаляются по мере необходимости и автоматически получают желаемые предварительно зарегистрированные действия.
Объект Hammer передается на общую функцию полезности EnableDragScroll
, которая добавляет обработчики для прокрутки (длинной, переменной длины) содержимого в пределах фиксированной площади страницы guideBrowserItems
.
Существует множество примеров ReplacePane("guideBrowserItems", <NEW URL>)
, чтобы динамически изменять содержимое <div>
, не затрагивая остальную часть страницы или скрипт.
И это только один из 30+ разных экземпляров Hammer с соответствующей обработкой.
Ни один из этих способов работы не представляется возможным в Hammer 2.0.
Так что теперь я буду придерживаться старых механизмов.