Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.04.2013, 09:08
Новичок на форуме
Отправить личное сообщение для shumi Посмотреть профиль Найти все сообщения от shumi
 
Регистрация: 09.04.2013
Сообщений: 4

Помогите разобраться с классами
У меня есть класс (ниже упрощенный вариант)
function Folio() {
	this.root = root = jQuery('body');
	this.folioWrap = root.find('.items');
	this.overflow_ = root.find('.detail-window');

	this.itemClick_ = function(evt){
		this.loadWork(url,750);
		return false;
	}

	this.loadWork = function(path,delay){
		this.overflow_.addClass("show");
		setTimeout(function() {
		folio.overflow_inner.html(" ").load(path, function() { 
		  folio.loading_.hide(); 
			folio.overflow_inner.addClass("show");
		  });
		}, delay);
	}
}
var folio = new Folio();

Проблема в методе loadWork .
не могу понять, почему в нем я не могу писать так:
this.loadWork = function(path,delay){
		this.overflow_.addClass("show");
		setTimeout(function() {
		this.overflow_inner.html(" ").load(path, function() { 
		  this.loading_.hide(); 
			this.overflow_inner.addClass("show");
		  });
		}, delay);
	}


Пока не смог понять в чем дело, но если написать вместо
this.overflow_inner
-
folio.overflow_inner
.
То всё работает. Кто-нибудь подскажите, я только недавно начал писать что-то на js. нагуглить не смог ничего.
setTimeout используется потому что нужно получить данные с задержкой.
Ответить с цитированием
  #2 (permalink)  
Старый 09.04.2013, 09:25
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Функция, переданная в качестве аргумента в setTimeout будет вызывана в контексте window, а не твоего инстанса (folio).
Скорее всего ты просто не понимаешь как работает this в javascript. Почитай об этом.
В ES5-совместимых браузерах контекст можно явно задать через .bind(context), в твоем случае это будет
setTimeout( (function(){ ... }).bind(this), delay)

Для старых браузеров либо подключать es5-shim.js либо оставить так, как у тебя, только объявлять folio внутри loadWork: var folio = this.
Ответить с цитированием
  #3 (permalink)  
Старый 09.04.2013, 09:27
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от shumi
setTimeout используется потому что нужно получить данные с задержкой.
Зачем? Задержки никто не любит. Наша жизнь слишком коротка.
Ответить с цитированием
  #4 (permalink)  
Старый 09.04.2013, 09:53
Новичок на форуме
Отправить личное сообщение для shumi Посмотреть профиль Найти все сообщения от shumi
 
Регистрация: 09.04.2013
Сообщений: 4

Спасибо большое.
Я думал, что дело в контексте, но не знал как исправить это.

Задержка нужна для визуализации.
Во время работы скрипта идет анимация, и если ответ приходит слишком быстро, то анимация прерывается на самом, так сказать, интересном месте.
Ответить с цитированием
  #5 (permalink)  
Старый 09.04.2013, 10:01
Новичок на форуме
Отправить личное сообщение для shumi Посмотреть профиль Найти все сообщения от shumi
 
Регистрация: 09.04.2013
Сообщений: 4

Всё заработала - спасибо!

Последний раз редактировалось shumi, 09.04.2013 в 10:05.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ответа сервера через iframe и xhr. Помогите разобраться. Arconas AJAX и COMET 0 26.02.2013 09:38
Помогите Разобраться в споре. merzavchick Оффтопик 48 03.10.2012 17:51
Подсчёт дней до конца акции - помогите разобраться со скриптом Chataine Общие вопросы Javascript 0 24.07.2011 14:48
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 10:44
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24