Раньше этот код работал, но теперь я не уверен, что отделил свои HTML-элементы управления от своего виджета jQueryUI.
В настоящее время таймер запускается правильно, но я теряю ссылку на _refreshTimeout после того, какодин тикТо есть, после первой отметки, снятие отметки с моего PlanViewRefreshCheckbox не останавливает работу моего таймера.
У меня есть два файла JavaScript, PlanView.js и PlanViewCanvas.js.
PlanView.js выглядит примерно так:
(function ($) {
var _minZoom = -2.0;
var _maxZoom = 2.0;
var _stepZoom = (_maxZoom - _minZoom) / 100;
var _refreshTimeout = null;
var _refreshInterval = 60000; //One minute
$(document).ready(function () {
//Initialize Refresh combo box.
$('#PlanViewRefreshCheckbox').click(function () {
if ($(this).is(':checked')) {
var planViewCanvas = $('#PlanViewCanvas');
//Binding forces the scope to stay as 'this' instead of the domWindow (which calls setTimeout).
_refreshTimeout = setTimeout(function(){planViewCanvas.PlanViewCanvas('refresh', _refreshInterval, _refreshTimeout)}.bind(planViewCanvas), _refreshInterval)
}
else {
clearTimeout(_refreshTimeout);
}
});
}
})(jQuery);
, а PlanViewCanvas.js содержит jQueryUIВиджет:
(function ($) {
$.widget("ui.PlanViewCanvas", {
//other properties and methods not-relevant to problem declared here.
refresh: function (refreshInterval, refreshTimeout) {
var self = this;
_stage.removeChildren();
self.initialize();
//Binding forces the scope to stay as 'this' instead of the domWindow (which calls setTimeout).
refreshTimeout = setTimeout(function () { self.refresh(refreshInterval, refreshTimeout) }.bind(self), refreshInterval);
},
}
})(jQuery);
Кажется ли, что я поступаю неправильно?
РЕДАКТИРОВАТЬ: Я думаю, что ответ, вероятно, использовать setInterval, а не setTimeout.