Javascript.RU

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

Как вызвать метод?
Здравствуйте. Помочите пожалуйста разобраться в том, как вызвать метод, который привязан к событию нажатия кнопки. Вроде звучит просто, но я не знаю как. С JS пришлось столкнуться только сейчас.

Есть дашборд (http://play.grafana.org/#/dashboard/...fana-play-home), на странице есть кнопка "Zoom out". Я хочу вызвать этот метод в другом месте, но увы не знаю как. Вот это место на странице:

<a class="small" ng-click="zoom(2)">Zoom Out</a>


Если в консоль ввести "zoom(2)", то получаю ошибку "ReferenceError: zoom is not defined". Как достучаться до этого метода?
Ответить с цитированием
  #2 (permalink)  
Старый 15.09.2014, 12:44
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

Сообщение от ibolgenos Посмотреть сообщение
Помочите пожалуйста

если там метод, то надо брать экзампляр класса:
var obj = {
fn: function (a) {
console.log(a)
}
};

obj.fn(2);
Ответить с цитированием
  #3 (permalink)  
Старый 15.09.2014, 14:08
Интересующийся
Отправить личное сообщение для ibolgenos Посмотреть профиль Найти все сообщения от ibolgenos
 
Регистрация: 15.09.2014
Сообщений: 11

Ну с ООП мне все ясно, вот только вопрос остается открытым. Я не знаю как найти какому классу принадлежит "zoom()". Средства отладки да и сам JS отличается от других языков программирования, поэтому пока "затык". Сижу читаю учебник на сайте.
Ответить с цитированием
  #4 (permalink)  
Старый 16.09.2014, 09:38
Интересующийся
Отправить личное сообщение для ibolgenos Посмотреть профиль Найти все сообщения от ibolgenos
 
Регистрация: 15.09.2014
Сообщений: 11

Ответить с цитированием
  #5 (permalink)  
Старый 16.09.2014, 09:45
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

ibolgenos,
Вообще вам надо читать документацию дашборда с которым вы работаете, там наверняка это есть. Неохота мне туда лезть и смотреть как это делать, но если приперло можно симулировать клик по кнопке зума (костыль). Просто
document.querySelector("selector").click()

Цитата:
Если в консоль ввести "zoom(2)", то получаю ошибку "ReferenceError: zoom is not defined".
Похоже на магию

Можете скинуть ссылку на свою страницу?

Последний раз редактировалось tsigel, 16.09.2014 в 09:48.
Ответить с цитированием
  #6 (permalink)  
Старый 16.09.2014, 10:21
Интересующийся
Отправить личное сообщение для ibolgenos Посмотреть профиль Найти все сообщения от ibolgenos
 
Регистрация: 15.09.2014
Сообщений: 11

Страница все так же - http://play.grafana.org/#/dashboard/...fana-play-home , кнопка ZOOM в самом верху.

Почитаю про document.querySelector("selector").click() , я так понимаю мне нужно ссылки ID какой нибудь присвоить и вписать вместо "selector"?
Ответить с цитированием
  #7 (permalink)  
Старый 16.09.2014, 10:25
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

ibolgenos,
аааб это же ангулар! я "ng" не заметил. Функция должна лежать где-то в контроллере DashboardCtrl

Чтобы эмулировать клик надо написать
$(".navbar .grafana-menu-zoom-out .small").click();
Ответить с цитированием
  #8 (permalink)  
Старый 16.09.2014, 10:45
Интересующийся
Отправить личное сообщение для ibolgenos Посмотреть профиль Найти все сообщения от ibolgenos
 
Регистрация: 15.09.2014
Сообщений: 11

tsigel, мне бы хотелось понять как вызвать метод который вызывается при клике. Клик у меня вышло кстати сделать и так как вы предложили выше, когда вместо selector написал класс кнопки

Не знаете как достучаться до метода zoom()? Мне бы хотелось понять принцип.
Ответить с цитированием
  #9 (permalink)  
Старый 16.09.2014, 10:53
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

ibolgenos,
Принцип прост. Ангулар создает объект $scope для каждого контроллера (в данном случае "DashboardCtrl"), и привязывает этот объект к конкретной верстке (это тот элемент в котором написано "ng-controller='DashboardCtrl'"). Дальше если очень грубо (и не совсем так, но сама идея), то он при клике смотрит есть ли ng-click, если есть - то ищет $scope к которому он привязан, потом вызывает метод (или проигрывает выражение, не знаю как ещё называть) в контексте этого $scope. То есть в данном случае происходит вызов $scope.zoom(2). Чтобы вам делать вызовы этих методов - надо получить доступ к $scope этого элемента.
Ответить с цитированием
  #10 (permalink)  
Старый 16.09.2014, 15:11
Интересующийся
Отправить личное сообщение для ibolgenos Посмотреть профиль Найти все сообщения от ibolgenos
 
Регистрация: 15.09.2014
Сообщений: 11

Не смог еще разобраться как это сделать, а вы знаете как это сделать? Или это требует детального изучения исходников?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать функцию из переменной? sss2019 Общие вопросы Javascript 7 02.09.2014 13:34
как вызвать анонимную функцию которая находится в подключенном файле(.js) arsen97 Общие вопросы Javascript 3 03.08.2014 00:23
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как вызвать функцию при загрузке страницы? Yevgeniy Events/DOM/Window 1 30.01.2013 17:34
Как вызвать функцию из функции ? PheonixS AJAX и COMET 7 20.06.2010 09:51