Два контекста в контексте 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, время: 11:06. |