Два контекста в контексте 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-объектный нужен в первую очередь. Как процитировано - так все работает. Но почему-то мне кажется что делать твердые копии имени объекта в объекте некомильфо. Потратил около часа в поисках решения - не нашел. Это значит либо так вообще не делают, либо все настолько просто, что такого рода вопросов не возникает. Вопрос такой: как получить в методе ссылку на инстансь в целом? При сохранении контекста вызова. Спасибо. |
Цитата:
Мне кажется лучше все же привязать контекст к инстансу, а ссылку на элемент получать из события (e.currentTarget || e.srcElement) |
Спасибо. Сделал, работает. Но внешний вид еще сильнее "поцтрадал". Гляньте, все ли правильно, пжлста.
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 = {}; |
Цитата:
Цитата:
|
Нет, разный. Индекс прямо пишется в img. По событию достается и проверяется. img собираются в унутренние массивы, но все равно не проканало. В js, оказывается нет классов вообще. В результате инстансь от объекта с которого уже сделана инстансь наследует все барахло предыдущей инстанси. Придется переписывать на функцию, чтобы был конструктор.
|
Цитата:
|
Да вообще затупил. Всего-то надо было заенкложить весь набор функций и одну запустить без имени. Это ж простейшая смотрелка, никаких внешних действий кроме юзерских щелчков не предусмотрено.
|
Часовой пояс GMT +3, время: 21:01. |