Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вызвать метод? (https://javascript.ru/forum/misc/50168-kak-vyzvat-metod.html)

ibolgenos 15.09.2014 11:53

Как вызвать метод?
 
Здравствуйте. Помочите пожалуйста разобраться в том, как вызвать метод, который привязан к событию нажатия кнопки. Вроде звучит просто, но я не знаю как. С 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". Как достучаться до этого метода?

skrudjmakdak 15.09.2014 12:44

Цитата:

Сообщение от ibolgenos (Сообщение 330639)
Помочите пожалуйста

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

obj.fn(2);

ibolgenos 15.09.2014 14:08

Ну с ООП мне все ясно, вот только вопрос остается открытым. Я не знаю как найти какому классу принадлежит "zoom()". Средства отладки да и сам JS отличается от других языков программирования, поэтому пока "затык". Сижу читаю учебник на сайте.

ibolgenos 16.09.2014 09:38

:help:

tsigel 16.09.2014 09:45

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

Цитата:

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

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

ibolgenos 16.09.2014 10:21

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

Почитаю про document.querySelector("selector").click() , я так понимаю мне нужно ссылки ID какой нибудь присвоить и вписать вместо "selector"?

tsigel 16.09.2014 10:25

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

Чтобы эмулировать клик надо написать
$(".navbar .grafana-menu-zoom-out .small").click();

ibolgenos 16.09.2014 10:45

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

Не знаете как достучаться до метода zoom()? Мне бы хотелось понять принцип.

tsigel 16.09.2014 10:53

ibolgenos,
Принцип прост. Ангулар создает объект $scope для каждого контроллера (в данном случае "DashboardCtrl"), и привязывает этот объект к конкретной верстке (это тот элемент в котором написано "ng-controller='DashboardCtrl'"). Дальше если очень грубо (и не совсем так, но сама идея), то он при клике смотрит есть ли ng-click, если есть - то ищет $scope к которому он привязан, потом вызывает метод (или проигрывает выражение, не знаю как ещё называть) в контексте этого $scope. То есть в данном случае происходит вызов $scope.zoom(2). Чтобы вам делать вызовы этих методов - надо получить доступ к $scope этого элемента.

ibolgenos 16.09.2014 15:11

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


Часовой пояс GMT +3, время: 03:27.