Передача аргументов с ExecJS

Мне нужно выполнить функцию javascript из моего приложения на Rails 4. Я попробовал следующее с ExecJS ( https://github.com/sstephenson/execjs) без какого-либо успеха:

my_js_function = 'function my_function(a){var b=a.split("$");var c="";for(i=0;i<=b.length-1;i++){if(!(i%2)){c+=b[i]}}var b=c.split("");c="";for(i=0;i<=b.length-1;i++){if(i%2){c+=b[i]}}return c}'
compiled_function = ExecJS.compile(my_js_function)
result = compiled_function.call(my_argument)

Оригинальная функция JS принимает аргумент (my_argument), который мне как-то нужно передать ему. Любая помощь о том, как это возможно, будет высоко ценится!

1 ответ

Решение

Вы были близки Вы не должны использовать call, вы должны использовать eval сюда:

my_js_function = 'function my_function(a){var b=a.split("$");var c="";for(i=0;i<=b.length-1;i++){if(!(i%2)){c+=b[i]}}var b=c.split("");c="";for(i=0;i<=b.length-1;i++){if(i%2){c+=b[i]}}return c}'
compiled_function = ExecJS.compile(my_js_function)
compiled_function.eval('my_function("heyhey")')
#=> ehy
Другие вопросы по тегам