2014-06-19 4 views
0

у меня есть этот ruby метод:Вызов метода рубиновый с различными параметрами, встроенных в JavaScript

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

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

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

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

Любая помощь очень ценится.

UPDATE: Это то, что я пытаюсь сделать

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', и вам придется продолжать оттуда. – Patru

ответ

0

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

+0

Посмотрите, что происходит, если я так называю: $ ("# someid"). Append ('<% something ("sometext")%>'); он работает нормально, но не распознает js и передаваемая рубиновая переменная (я не уверен, как ее передать!) – user122121

+0

И этот метод не является методом контроллера. Он определен в общем модуле. – user122121

+0

@Rajarshi: Вы можете вызвать методы контроллера с помощью соответствующих настроек в вашем 'routes.rb', там вы можете проанализировать параметры, передать их вашему методу ruby ​​и упаковать результат, чтобы вернуть его. У вас будет трудное время, если вы будете работать на своем сервере. Как я уже сказал, другой подход использует 'opalrb' для компиляции вашего ruby ​​в' JavaScript', который может быть распространен вместе с вашими другими скриптами в браузере. Самые простые «рубиновые» модули могут быть легко включены в файл «opal». – Patru

1

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

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

$.ajax({ 
    url: '/some_url', 
    data: { jsvar: jsvar }, 
    success: function(data) { 
     $("#someid").append(data.sometext); 
    } 
}); 
+0

Не могли бы вы рассказать, как? – user122121

+0

На самом деле это внутри вызова ajax. Rubyobject является одним из вызова, а jsvar имеет текст указанного элемента DOM, полученный от «данных» запроса на вызов. – user122121

+0

Просто используйте этот рубиновый метод 'something' на сервере. – uselesssmile

Смежные вопросы