javascript - 如何在 Rails“User.select(...)”中传递 JavaScript 变量
问题描述
我有两行代码:
var itemname = document.getElementById("itemname"+x.toString()).value;
var test = JSON.parse('<%= raw Item.select('promCode','baseCode','monadaMe','price','fpa').where(:itemName => 'itemname' ).collect { |p| [p.promCode, p.baseCode, p.monadaMe, p.price, p.fpa] }.join("\n").gsub("\n", " ").split(" ")%>');
我想通过我var itemname
的 to where(:itemName=> 'itemname')
。
解决方案
将变量从运行在客户端的 JavaScript 传递到运行在服务器上的 Rails 的唯一方法是发送 HTTP 请求。
代码在两个完全独立的进程中运行,在不同的机器上和不同的时间。这不仅适用于 rails,而且适用于您在服务器上生成 JavaScript 的任何时候——使用任何语言/框架。
您的js.erb
模板首先通过服务器上的 ERB 运行。它只是将其作为字符串缓冲区处理并评估包含的任何 ERB 标记。然后 Rails 将结果发送给实际运行 javascript 的客户端。因此,当代码通过 ERB 运行时,rails 完全不可能知道从一个甚至可能还不存在的元素派生的变量的值。
如果要使用来自服务器的值填充 a 选择,则需要向服务器执行AJAX 请求,该请求返回用于构建元素的 JSON 或由模板呈现的 javacript,js.erb
如果您想更进一步,该模板会更改页面在那个兔子洞里。
推荐阅读
- react-native - package.json main 和 app.config.js expo.entryPoint 有什么区别?
- reactjs - 在 React 中单击按钮时在主要内容上显示 iframe
- .net - Powershell 获取类型
- python - 在公司代理后面安装 ibm_db 时 Errno 111 Connection denied (DB2 with Python3)
- datatable - 为 PrimeReact 数据表自定义颜色
- rust - Rust 集合字段如何从另一个字段借用?
- vb.net - 将窗体另存为无边框图像
- laravel - Ziggy - 如果我们从 app.js 中的“ziggy”导入路线,则根本不会安装惯性 js vue 应用程序
- mysql - Docker容器:/bin/sh:cat:没有这样的文件或目录
- swiftui - 在 SwiftUI 中更改分段控制器属性