метод link_to и событие щелчка в направляющих

Теперь рассмотрим следующий код:

void print_double(const double d){
    printf("d = %lf\n", d);
}

int main(int args, const char *argv[]){
    double d = 10.2;
    print_double(d);
}

Ваш код не имеет псевдонимов. d в main и d в print_double являются различными объектами, поскольку аргументы всегда передаются по значению. Но если бы мы «исправили» пример:

void print_double(const double *pd){
    printf("d = %lf\n", *pd);
}

int main(int args, const char *argv[]){
    double d = 10.2;
    print_double(&d);
}

Это все еще хорошо определено. *pd является lvalue типа const double. const double является квалифицированной версией double. Все типы совместимы между собой (тривиально). Таким образом, вторая пуля имеет место, и этот псевдоним действителен.

71
задан Michał Perłakowski 29 December 2015 в 20:51
поделиться

1 ответ

Можно использовать link_to_function (удаленный в направляющих 4.1):

link_to_function 'My link with obtrusive JavaScript', 'alert("Oh no!")'

Или, если абсолютно необходимо использовать link_to:

link_to 'Another link with obtrusive JavaScript', '#',
        :onclick => 'alert("Please no!")'

Однако исправление JavaScript в Ваш сгенерированный HTML является навязчивым, и является плохой практикой.

Вместо этого Ваш код направляющих должен просто быть чем-то вроде этого:

link_to 'Link with unobtrusive JavaScript',
        '/actual/url/in/case/javascript/is/broken',
        :id => 'my-link'

И принятие Вас использует Прототип платформа JS, JS как это в Вашем application.js:

$('my-link').observe('click', function (event) {
  alert('Hooray!');
  event.stop(); // Prevent link from following through to its given href
});

Или если Вы используете jQuery:

$('#my-link').click(function (event) {
  alert('Hooray!');
  event.preventDefault(); // Prevent link from following its href
});

При помощи этой третьей техники Вы гарантируете, что ссылка будет следовать до некоторой другой страницы — не, только перестали работать тихо — если JavaScript недоступен пользователю. Помните, JS мог быть недоступным, потому что у пользователя есть плохое интернет-соединение (например, мобильное устройство, общедоступный Wi-Fi), пользователь или системный администратор пользователя отключили его, или неожиданная ошибка JS произошла (т.е. ошибка разработчика).

186
ответ дан 13 revs, 2 users 99% 24 November 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: