Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов ф-ции из (function($) {})(jQuery);-это возм? 
V
    Опции темы
Killer_13
  Дата 29.5.2012, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Здравств, есть у меня одно действие по которому мне нужно менять 2 значени в таком вот блоке "(function($) {})(jQuery);" - погуглил чуток, оказывается. что вызвать отсюда функцию не возмоэжно.. :( Как быть?

У меня такая фишка, - если срабатывает move-Event с ExtJs-Window, то менять координаты в одном плагине jQuery. А этот плагин в отдельном файле ограничен вот таким блоком. Может не вызов функции. может что-то другое.. Знает кто-то другое(или просто) решение?
Спасибо. 
PM MAIL   Вверх
Amphiluke
Дата 29.5.2012, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 17
Всего: 112



Не уверен, что до конца понял проблему по вашему описанию. По всей видимости, вы хотите изменить локальные переменные, объявленные внутри анонимной функции "(function($) {})(jQuery);"? Да, это невозможно (за крайне редкими исключениями, о которых лучше не знать). Программист, писавший плагин, намеренно включил код в анонимную функцию, чтобы не захламлять глобальное пространство имен и/или ограничить доступ извне к внутренним (локальным) переменным. С локальными вложенными декларациями функций — то же самое.

Чтобы иметь возможность взаимодействовать с внутренностями плагина, этот плагин сам должен предоставлять набор свойств/методов, составляющих интерфейсную часть его реализации, и доступных, к примеру, через собственное пространство имен модуля.
PM   Вверх
Killer_13
Дата 29.5.2012, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Кажется решилось(подсказали), но способ мне не нравится. хотя и работает.
Вынес переменную как глобальную. вне jQuery плагина. :(
Это оч сильний "хардкодинг" с точки зрения js?

Цитата(Amphiluke @  29.5.2012,  14:22 Найти цитируемый пост)
По всей видимости, вы хотите изменить локальные переменные, объявленные внутри анонимной функции "(function($) {})(jQuery);"? 
 - да, вы поняли совершенно верно

Цитата(Amphiluke @  29.5.2012,  14:22 Найти цитируемый пост)
Чтобы иметь возможность взаимодействовать с внутренностями плагина, этот плагин сам должен предоставлять набор свойств/методов, составляющих интерфейсную часть его реализации, и доступных, к примеру, через собственное пространство имен модуля. 
 - а можно поподробней? Мне кажется это будет более елегантное решение чем вынести переменную из плагина и сделать ее глобальной...

Спасибо.

PM MAIL   Вверх
Amphiluke
Дата 29.5.2012, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 17
Всего: 112



Цитата(Killer_13 @  29.5.2012,  18:55 Найти цитируемый пост)
Это оч сильний "хардкодинг" с точки зрения js?

Ну да, вынос переменных в глобальное пространство имен считается одним из грубых приемов программирования (антишаблон).

Цитата(Killer_13 @  29.5.2012,  18:55 Найти цитируемый пост)
 а можно поподробней? Мне кажется это будет более елегантное решение чем вынести переменную из плагина и сделать ее глобальной...

Для этого придется допиливать плагин, что лишает вас возможности последующих обновлений исходников (или, по крайней мере, это будет не так просто). Впрочем, вы все равно уже изменили его… По хорошему, его придется переписать основательно, и всю последующую поддержку и доработку взвалить на себя.
Как пример, доработанный вами плагин должен объявить одну-единственную глобальную переменную — собственное пространство имен. Это фактически объект, предоставляющий набор методов чтения/изменения нужных вам параметров плагина (ну и, может быть, еще какие-нибудь методы).
Например, если раньше вы делали из нескольких локальных переменных просто глобальные, то теперь плагин задействует, скажем, шаблон «модуль»
Код

var pluginModifiedByMe = (function() {
    // эти параметры остаются локальными переменными,
    // но вы их можете считывать и изменять при помощи методов объекта pluginModifiedByMe
    var param1, param2;

    function param1Getter() {
        return param1;
    }

    function param1Setter(newVal) {
        // всяческие проверки на корректность нового значения
        param1 = newVal;
    }

    function param2Getter() {
        return param2;
    }

    function param2Setter(newVal) {
        // всяческие проверки на корректность нового значения
        param2 = newVal;
    }

   // ... остальная реализация плагина ...

    return {
        setParam1: param1Setter,
        getParam1: param1Getter,
        setParam2: param2Setter,
        getParam2: param2Getter
    };

})();

Теперь вместо чтения/изменения глобальных переменных вам нужно будет пользоваться методами объекта pluginModifiedByMe:
Код

var param1 = pluginModifiedByMe.getParam1();
pluginModifiedByMe.setParam1(param1 + 123);

Это, заметьте, просто ориентировочный пример возможной реализации, не более. Почитайте про шаблоны в JavaScript, если этот вопрос вам интересен. Можете взять книжку С. Стефанова, к примеру.


Это сообщение отредактировал(а) Amphiluke - 29.5.2012, 15:35
PM   Вверх
Killer_13
Дата 29.5.2012, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Amphiluke - спасибо, регил сл способом. добавил функцию в плагин, а потом вызвал функцию от объекта. smile Вопрос решен!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.