У меня есть этот 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 на основе этих параметров вместе с другими данными, переданными в него. Спасибо.
Обычно наш ruby
работает на сервере, и ваш JavaScript
работает в браузере, поэтому вызов одного из другого в значительной степени невозможно. Разумеется, вы можете прибегнуть к Ajax в качестве консультанта @uselesssmile, но это включает в себя гораздо больше, чем простой вызов метода. С другой стороны, вы можете скомпилировать свой ruby
на JavaScript
с помощью opalrb
, тогда вы можете его упаковать в свой JavaScript
на клиенте и вызвать его напрямую.
Вы не можете этого сделать, потому что шаблоны erb компилируются перед запуском приложения. Используйте удаленные запросы для получения информации с сервера, если вы хотите отправить некоторые параметры js.
UPD: Что-то вроде этого
$.ajax({
url: '/some_url',
data: { jsvar: jsvar },
success: function(data) {
$("#someid").append(data.sometext);
}
});
something
. В Ajax-вызове вы должны указать этот маршрут с нужными параметрами. Они будут в конечном итоге в вашем методе контроллера в обычном хэшеparams
и вам придется продолжить оттуда.