Rails: рендеринг ссылки с удалённым: true не запускает AJAX

Проблема здесь, по-видимому, не в разрешении перегрузки , а на самом деле вычет параметра шаблона . Хотя превосходный ответ из @In silico разрешит проблему неоднозначной перегрузки в целом, кажется лучшим решением при работе с std::for_each (или аналогичным) является явное указание его параметров шаблона:

// Simplified to use free functions instead of class members.

#include 
#include 
#include 

void f( char c )
{
  std::cout << c << std::endl;
}

void f( int i )
{
  std::cout << i << std::endl;
}

void scan( std::string const& s )
{
  // The problem:
  //   error C2914: 'std::for_each' : cannot deduce template argument as function argument is ambiguous
  // std::for_each( s.begin(), s.end(), f );

  // Excellent solution from @In silico (see other answer):
  //   Declare a pointer of the desired type; overload resolution occurs at time of assignment
  void (*fpc)(char) = f;
  std::for_each( s.begin(), s.end(), fpc );
  void (*fpi)(int)  = f;
  std::for_each( s.begin(), s.end(), fpi );

  // Explicit specification (first attempt):
  //   Specify template parameters to std::for_each
  std::for_each< std::string::const_iterator, void(*)(char) >( s.begin(), s.end(), f );
  std::for_each< std::string::const_iterator, void(*)(int)  >( s.begin(), s.end(), f );

  // Explicit specification (improved):
  //   Let the first template parameter be derived; specify only the function type
  std::for_each< decltype( s.begin() ), void(*)(char) >( s.begin(), s.end(), f );
  std::for_each< decltype( s.begin() ), void(*)(int)  >( s.begin(), s.end(), f );
}

void main()
{
  scan( "Test" );
}

1
задан SRack 18 January 2019 в 17:10
поделиться

1 ответ

Нашел решение этой проблемы после небольшой отладки.

Глядя на вывод терминала при переходе по ссылке, я заметил, что иногда он пытается отправить его через JS, за которым быстро следует HTML; другие, похоже, будут отправлены только через HTML.

Это указывало на расу между поведением по умолчанию и поведением в результате использования remote: true.

Решением было вызвать e.preventDefault() для обработчика щелчков элемента:

$('.my-element').click(function(e) { e.preventDefault(); })

Не идеально, и я предполагаю, что исправлено в более новых версиях Rails, хотя здесь есть небольшое закрытие:)

0
ответ дан SRack 18 January 2019 в 17:10
поделиться