我最近开始了一个涉及ruby on rails/javascript/jquery的项目。我对这一切都很陌生。我所参与的部分是这样的。用户点击一个按钮。将打开一个对话框,用户将在其中输入要搜索的术语。使用这个术语,我将通过查看xml来构造URI。然后我会做一个REST调用。响应将是一个XML文件。我将解析它,并在用户输入要搜索的术语的同一对话框中显示数据。
我正在使用JQuery创建一个对话框。我正在用ruby代码(Helper类)做解析和REST调用。我没有使用模型和控制器。现在我需要将数据从helper方法发送到erb文件,在那里我将以表格的形式显示数据。输出将如下所示
string11 string12 string13
string21 string22 string23
string31 string32 string33
. . .
. . .
现在,在ruby代码中,我为每一列创建了3个数组。我不知道如何将数据从ruby发送到html/javascript。如果有更好的方法做到这一点,那么请让我知道。对于ex:与其作为3个单独的数组发送,不如作为xml/json发送?或者任何其他的建议都会很有帮助。主要是我不了解如何将这些数据发送到erb文件。提前谢谢你。
编辑:添加示例代码
Javascript/Jquery -
单击按钮时,我想调用erb文件中的拼音方法例如:<%= getUserList%> erb文件也有其他javascript/html代码来显示其他内容。
在helper方法中,我有getUserList方法
def getUserList(search)
uri = create_url(search)
@doc = Nokogiri::HTML(open(uri))
//Doing parsing and other stuffs here
//creating 3 array as mentioned above which needs to be displayed
end
我想要显示上面的数组。我不确定如何将这些数组发送到调用此方法的erb文件
发布于 2012-03-19 09:10:54
在您的控制器中:
def users
respond_to do |format|
format.js do
render(:js => "callback(#{@users.to_json});")
end
end
end
在您的HTML中使用类似以下内容来调用它:
<%= link_to_remote "get users", :url => { :action => "users" } %>
有关从Rails操作呈现普通JavaScript的更多信息:http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-vanilla-javascript
这个示例构造了JavaScript,它使用JSON数据在JavaScript代码中调用"callback()“函数。您的回调函数将接收一个易于解析的JSON字符串。如果确实需要,也可以使用to_xml发送XML,但是解析JSON要简单得多,而且速度也快得多。
在本例中不需要帮助器,因为包含数据的JavaScript调用将直接来自您的控制器。没有视图模板,所以你不需要帮助器。获取@users的代码的最佳位置是在用户模型类中。不是活动记录模型,而是普通模型。从远程REST API获取用户的代码可能是一个类方法。(如果您感到懒惰,那么可以在"users“控制器操作中使用REST API响应设置@users。但这并不是Rails的理想用法,因为Rails的全部要点是MVC。)
如果您使用的是jQuery,那么您还可以使用jQuery的getJSON()函数,这样您的控制器将只发送JSON数据,而不使用回调:http://api.jquery.com/jQuery.getJSON/
请注意,这似乎是您正在寻找的简单类型的答案,但对于更复杂的应用程序来说,这并不是真正的最佳方式。目前做这类事情的最好方法是使用像Backbone.js这样的东西。http://documentcloud.github.com/backbone/使用Backbone.js,您可以在JavaScript中定义一个"users“集合,设置该集合的REST URL (它可以是Rails应用程序中的一个URL,它可以中继来自其他一些http://documentcloud.github.com/backbone/的数据),然后您只需在JavaScript中调用users.fetch()
来加载数据即可。它非常类似于Active Record,但用于客户端站点。它更好,因为它抽象了流程,并允许您更新和删除记录,以及简单地列出它们。
https://stackoverflow.com/questions/9762365
复制相似问题