当用户从第一个选择菜单中选择一个选项时,我正在尝试加载第二个选择菜单。这是我的application.js代码:
$(document).ready(function(){
$('#aidmodel_brand').change(function() {
$("select option:selected").each(function () {
$('#modeler').load('shared/model');
});
});
});
我知道这段代码有效,因为我已经用通用的jquery事件替换了最后一行,并且当选择了第一个选择菜单中的选项时,在页面上看到了结果。
问题在于,当我运行上面的代码时,浏览器为共享/模型执行了GET请求,但是我收到了404错误。这是我可以通过routes.rb修复的东西吗?
另外,我尝试使用单引号和双引号.html('<%= escape_javascript(render(:partial => shared/model)) %>')
。单引号只会导致.html('')中的确切文本打印在我的#modeler div中。双引号什么都不做。
我已经看过通过在我的aidmodel控制器中创建定义的传统方法解决并在views / aidmodels中创建一个具有相同名称的.js.erb,但我无法弄清楚如何触发加载第二个选择菜单没有点击表单提交按钮..我不想要。
对不起提出的问题,但我昨晚花了好几个小时,因此失去了充足的睡眠!谢谢!
更新:
我试图使用上面的代码创建一个名为scripto的js.erb部分,并使用<%= render( :partial => 'shared/scripto', :formats=>[:js] ) %>
调用它......这似乎有效..将java代码导入到我的页面中..但是,一旦我将任何ruby代码添加到像.html()这样的部分中,我就会得到一个缺失的部分错误。我应该提一下,我也尝试将:handlers=>[:erb]
添加到部分呼叫中......仍然没有运气。感谢
更新2:
$(document).ready(function(){
$('#aidmodel_brand').change(function() {
$("select option:selected").each(function () {
$('#modeler').html('<%= escape_javascript(render(:partial => shared/model)) %>');
});
});
});
更新3
好的,所以我已成功调用了上面的部分,但在部分名称周围使用了双引号...但是,现在我遇到了一个真正的问题。我想将所选选项的名称传递给部分...到目前为止,我已经想出了如何将所选选项分配给java var:
$("select option:selected").each(function () {
var brand = ($(this).text());
但是,我必须以以下形式将变量传递给partial:brand =&gt; @brand ..有没有办法将var品牌中的文本分配给@brand变量,这样可以传递给部分?谢谢!
更新4
再次感谢穆罕默德。不幸的是,我没有看到任何方式从部分内部访问变量。我认为$(this).text()必须以@brand的形式转换为rails实例变量才能从partial内部访问。另外,我认为你不能把java代码放在escape_javascript方法中,所以不管怎样,@brand的变量赋值必须先发生。
答案 0 :(得分:2)
不,因为js无法理解Ruby代码。只有rj可以。如果你想从js调用partial,那么创建一个.rjs文件并使用<%= escape_javascript(render(:partial => shared/model)
对于UPDATE 2,您添加了:
看起来不错,但请仔细检查此行$('#modeler').html('<%= escape_javascript(render(:partial => "shared/model")) %>');
部分名称是否为双引号。
答案 1 :(得分:1)
有一种有用的方法可以渲染局部并将其保存在变量中:render_to_string
。是的!您可以从js
加载部分内容:
在行动中,你可以像以下一样在部分渲染:
respond_to do | format |
format.html {render :partial => 'partial1'}
format.json {render :json => {:partial1 => render_to_string(:partial => 'partial1'), :partial2 => render_to_string(:partial2 => 'partial2')}}
端
在js中你可以使用这样的代码:
$。get('[path_to_action]',{[params are here]},function(data){[data is html or json。这是你动作的回复]})
注意:您还可以使用js.erb
或html.erb
模板