Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.01.2014, 10:58
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Два контекста в контексте onload
Начинается канонично:

elem.addEventListener("click", this.load_image, false);


продолжается не менее того:

load_image: function (e) {

		if (e.preventDefault)
			e.preventDefault(); 
		e.returnValue = false;

		img = new Image();

		img.onload = function() {
			ImageZoom.show_me(img);
		}

		img.onerror = function() {
			return false;
		}
		img.title = this.title;
		ImageZoom.current_index = this.index;
		img.src = this.href;

	}


Объект как вы уже заметили называется ImageZoom. В процитированный типа метод приходит конечно контекст DOM' элемента, конкретно anchor. Я не могу заменить через call или bind его контекст на self-объектный, потому что elem-объектный нужен в первую очередь.

Как процитировано - так все работает. Но почему-то мне кажется что делать твердые копии имени объекта в объекте некомильфо.

Потратил около часа в поисках решения - не нашел. Это значит либо так вообще не делают, либо все настолько просто, что такого рода вопросов не возникает.

Вопрос такой: как получить в методе ссылку на инстансь в целом? При сохранении контекста вызова.

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 02.01.2014, 11:46
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
Вопрос такой: как получить в методе ссылку на инстансь в целом? При сохранении контекста вызова.
Только так, как это у тебя сделано.
Мне кажется лучше все же привязать контекст к инстансу, а ссылку на элемент получать из события (e.currentTarget || e.srcElement)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 02.01.2014, 13:15
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Спасибо. Сделал, работает. Но внешний вид еще сильнее "поцтрадал". Гляньте, все ли правильно, пжлста.

elem.addEventListener("click", function(e){this.load_image(e)}.bind(this), false);


и соответственно

load_image: function (e) {

		if (e.preventDefault)
			e.preventDefault(); 
		e.returnValue = false;

		var elem = e.currentTarget || e.srcElement;
		
		var img = new Image();
		// draw new image
		img.onload = function() {
			this.show_me(img);
		}.bind(this);

		img.onerror = function() {
			return false;
		};
		
		img.title = elem.title;
		this.current_index = elem.index;
		img.src = elem.href;

	}


В анамнезе все было обычным набором функций в пределах одного файлика, но возникла потребность завести две или больше отдельных смотрелки на два или больше не связанных контейнера. Скажем фотки продукта сами по себе крутятся по нажатию кнопок, а фотки связанных продуктов не пересекаются, крутятся сами по себе. И резко поплохело...

Я еще не проверял сработает ли оно без конструктора, потому что объект этот - объект

var ImgeZoom = {};

Последний раз редактировалось kostyanet, 02.01.2014 в 13:19.
Ответить с цитированием
  #4 (permalink)  
Старый 02.01.2014, 19:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
var ImgeZoom = {};
Сообщение от kostyanet
        this.current_index = elem.index;
То есть один current_index на всю страницу? Не должен ли он быть свойством инстанса, коих должно быть два (то есть нужен конструктор чтоб их клепать)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 03.01.2014, 00:44
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Нет, разный. Индекс прямо пишется в img. По событию достается и проверяется. img собираются в унутренние массивы, но все равно не проканало. В js, оказывается нет классов вообще. В результате инстансь от объекта с которого уже сделана инстансь наследует все барахло предыдущей инстанси. Придется переписывать на функцию, чтобы был конструктор.
Ответить с цитированием
  #6 (permalink)  
Старый 03.01.2014, 01:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
В js, оказывается нет классов вообще
Вот это поворот! Не ожидал, да?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 03.01.2014, 10:15
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Да вообще затупил. Всего-то надо было заенкложить весь набор функций и одну запустить без имени. Это ж простейшая смотрелка, никаких внешних действий кроме юзерских щелчков не предусмотрено.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как постваить в ряд два div с overflow:hidden? zebra741258963 (X)HTML/CSS 2 10.04.2012 14:08
Два блока div разъезжаются при скроллинге окна браузера. call007 jQuery 0 03.04.2011 16:21
Конфликтуют два скрипта Aydar_nv Работа 2 27.01.2011 11:13
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03
Два одинаковых сценария на одной странице Genetics Общие вопросы Javascript 7 12.07.2009 01:46