Вызовите метод ruby с различными параметрами, встроенными в JavaScript

0

У меня есть этот ruby метод:

def something(sometext, jsvariable, rubyobject)
   return HTMLOBJECT
end

И я хотел бы назвать этот метод следующим образом в javascript функции:

$("#someid").append('<% something("sometext", '/jsvar/', rubyobject) %>');

Его не работает. Я не знаю, как назвать этот метод функцией javascript с правильным форматированием переменных. Я действительно не знаю точного синтаксиса.

Буду признателен за любую оказанную помощь.

ОБНОВЛЕНИЕ: Это то, что я пытаюсь сделать

function somejsfunc(){
  $.ajax({ 
    url: "/app/SomeController/someMethod",
    data: {'something': something }
    success: function(data){
      var $response1 = $(data);
      jsvar = $response1.find('#anotherselector').text();
      $("#someid").append('<% something("sometext", '/jsvar/', @rubyobject) %>');
    }
 });
}

Пожалуйста, обратите внимание

def something 

это общий метод, который возвращает элемент HTML DOM на основе этих параметров вместе с другими данными, переданными в него. Спасибо.

  • 0
    Вам понадобится маршрут к вашему методу в рельсах, который приведет к вашему методу something . В Ajax-вызове вы должны указать этот маршрут с нужными параметрами. Они будут в конечном итоге в вашем методе контроллера в обычном хэше params и вам придется продолжить оттуда.

2 ответа

0
Лучший ответ

Обычно наш ruby работает на сервере, и ваш JavaScript работает в браузере, поэтому вызов одного из другого в значительной степени невозможно. Разумеется, вы можете прибегнуть к Ajax в качестве консультанта @uselesssmile, но это включает в себя гораздо больше, чем простой вызов метода. С другой стороны, вы можете скомпилировать свой ruby на JavaScript с помощью opalrb, тогда вы можете его упаковать в свой JavaScript на клиенте и вызвать его напрямую.

  • 0
    Посмотрите, что если я называю так: $ ("# someid"). Append ('<% нечто ("sometext")%>'); это работает нормально, но не распознает js и передается переменная ruby (я не уверен, как передать ее скорее!)
  • 0
    И этот метод не является методом контроллера. Он определен в общем модуле.
Показать ещё 3 комментария
1

Вы не можете этого сделать, потому что шаблоны erb компилируются перед запуском приложения. Используйте удаленные запросы для получения информации с сервера, если вы хотите отправить некоторые параметры js.

UPD: Что-то вроде этого

$.ajax({
   url: '/some_url',
   data: { jsvar: jsvar },
   success: function(data) {
       $("#someid").append(data.sometext);
   }
});
  • 0
    Можете ли вы уточнить, как ??
  • 0
    На самом деле это внутри вызова ajax. Объект rubyobject является объектом вызова, а jsvar содержит текст указанного элемента DOM, полученный из «данных» запроса вызова.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню