Rails 在 Rails 中,View 中的 JavaScript 代码调用 Helper 中的方法,如何传入一个整型参数?

roar · October 24, 2014 · Last by huobazi replied at October 24, 2014 · 4383 hits

背景是这样的:

我通过 Ajax 从 controller 中获取到一个数字,现在需要在 javascript 代码中调用 helper 文件中的一个方法对这个数字进行处理,然后再赋给 view 页面中的某个标签显示出来。

但是现在往这个方法传入这个整数时一直出现问题。

javascript 代码如下:

var disk_size = "<%= storage_in_proper_unit(" + value + ") %>";
$('#vcluster_vm_temp_disksize').val(disk_size);

其中,value 是获取到的整数,storage_in_proper_unit() 方法是 helper 中的一个函数,它的参数一个整数(不是字符串)。 执行时报错:

comparison of String with 9999999999 failed

请教各位应该如何解决,非常感谢!

javascript 调用 rails helper 方法?

#1 楼 @hz_qiuyuanxin 刚才标题可能有点歧义,我完善了一下。在 rails 的 view 页面中通过 Ajax 从 controller 中获取一个整数,然后再 view 页面中的 javascript 代码中继续处理,处理结果再赋给某个标签显示出来

你的 value 在那赋值的?或者多上面几行代码贴出来。

var disk_size = "<%= storage_in_proper_unit(" + value + ") %>";

这个感觉好诡异,从代码看 value 应该是用 js 赋值的,rails 的 helper 应该是在服务器端执行吧,报错是不是服务器端执行的时候,js 变量还没有接收到正确的整数值导致的。

#2 楼 @roar

你认为这段代码,能够发起 ajax 请求到 rails 服务?

var disk_size = "<%= storage_in_proper_unit(" + value + ") %>";

#3 楼 @huobazi value 是 views 的 javascript 代码向 controller 发起请求获取的返回值,这个返回值是个整数。这一步我已经操作完了,现在我需要做的就是在 javascript 代码中调用 helper 中的一个方法,而这个方法需要这个返回值 value 作为参数

#4 楼 @msms rails 的 helper 不是只能在 view 中引用吗?在 controller 中是不能使用的。现在的 value 已经获取到返回值了,所以只需要考虑如何在 view 的 javascript 代码中调用 helper 中的方法,并把这个整数 value 正确的传进去。

var disk_size = "<%= storage_in_proper_unit(" + value + ") %>";

storage_in_proper_unit() 方法就是 helper 中的方法,value 就是一个整数,我现在就像让这个方法能够正确执行,但是总是出现问题。。%>_<%

#5 楼 @hz_qiuyuanxin 这个代码不是从服务器发起 Ajax 请求的,这部分工作我已经完成了,value 就是返回的整数值,现在需要做的就是对这个 value 做一个处理。。可以参考下 6 楼的解释。。:)

#8 楼 @roar

js 代码是在浏览器这边运行的,你认为浏览器这边的进程能够调用 rails 里的 helper 方法么?

#7 楼 @roar 你要明白所有与 Ruby 相关的代码只能在服务器端执行,与 js 相关的代码只能在浏览器执行,Ruby 生成一些 js 或 HTML 给浏览器使用,而不能交叉使用,,

view 的 help 函数是在服务器端执行的,javascript 代码是在浏览器前端执行的,或许你需要把 storage_in_proper_unit() 的逻辑从后端移到前端?就是在 javascript 中定义一个同样的 storage_in_proper_unit() javascript 函数

最简单的方法,Ajax 请求之后后端直接输出需要的格式,Javascript 直接拿来用就可以了。

根据你的描述,你走错路了

方法一 按照 12 楼说的做 方法二 保持现状 再来一次 ajax 调用服务器端代码。

You need to Sign in before reply, if you don't have an account, please Sign up first.