пятница, 10 сентября 2010 г.

Событие изменения свойства в Javascript

Довольно частая задача - запустить какие-то действия в скрипте в ответ на изменение некоторого свойства объекта. Подумав в очередной раз над этой задачей написал небольшой класс реализующий это поведение.

function Property (param_value) {
var value = param_value;
var delegates = new Array();
var RiseChangedEvent = function () {
$.each(delegates, function (index, item) {
item(value);
});
};
this.Property = function () {

this.SetChangedEventDelegate = function (delegate) {
delegates.push(delegate);
};
this.Get = function () {
return this;
};
this.Set = function (param_value) {
value = param_value;
RiseChangedEvent();
};

};
return new this.Property();
};

delegates - коллекция ссылок на функции обратного вызова.
Подписываемся функцией - SetChangedEventDelegate(),


Использование:


event.finished = new Property(event.finished);
//Заменяем переменную свойством (объектом класса Proerty)
event.finished.SetChangedEventDelegate(function (value) {
input.attr("checked", value);
});
//Подписываемся на событие изменения свойства
//Теперь все обращения только через get и set
var input = event.finished.Get();
event.finished.Set(this.checked);