Показать сообщение отдельно
  #1 (permalink)  
Старый 25.02.2013, 17:40
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

оцените такой подход создания классов
Сабж. Насколько такой подход уместен в JS? Какие могут быть проблемы?
var popupObject = {
	// URL обработчика
	url: null,
	// Данные для запроса
	data: {},
	// Функция, которая будет выполнена в случае выполнения запроса
	success: function(data, textStatus, jqXHR){
		// Пустая функция, не надо сюда ничего писать
	},
	
	/**
	 * Конструктор объекта.
	 * 
	 * @param string url путь к обработчику запроса
	 * @param object data данные для запроса
	 * @param function success функция, которая выполнится в случае выполнения запроса
	 * @return object this 
	 */
	constuctor: function(url, data, success){
		this.url = url;
		this.data = data !== undefined ? data : this.data;
		this.success = success !== undefined ? success : this.success;
		return this;
	},
	
	/**
	 * Основной метод, выполняющий запрос, прорисовывающий данные из ответа и
	 * исполняющий метод success
	 */
	run: function() {
		$j.ajax({
			type: "POST",
			url: this.url,
			data: this.data,
			cache: false,
			context: this,
			success: function(data, textStatus, jqXHR){
				if (data.status.toLowerCase() === 'ok') {
					this.embed(data);
					this.success(data, textStatus, jqXHR);
				} else {
					if (window.console && window.console.log) {	
						// console.log(data);
					}
				}
			}
		});
	},
	
	/**
	 * Метод, выполняющий вставку данных из ответа куда-либо.
	 * В нашем случае - в попап.
	 * Данный метод можно перегрузить и вставлять данные куда угодно, в любое мето в DOM-дереве.
	 * 
	 * @param array data response данные
	 */
	embed: function(data) {
		var unique_id = 'unique_' + this.rand();
		var full_id = unique_id + '_for_popup';
		$j('<div id="' + full_id + '" style="display:none"></div>').appendTo('body').append(data.content);
		openStaticPopup(unique_id);
		$j('#' + full_id).remove();
	},

	rand: function() {
		return Math.floor(Math.random() * 1000);
	}
};
Ответить с цитированием