Jquery 是否可以直接从application.js渲染部分
当用户从第一个选择菜单中选择一个选项时,我试图加载第二个选择菜单。下面是我的application.js代码:Jquery 是否可以直接从application.js渲染部分,jquery,ruby-on-rails,Jquery,Ruby On Rails,当用户从第一个选择菜单中选择一个选项时,我试图加载第二个选择菜单。下面是我的application.js代码: $(document).ready(function(){ $('#aidmodel_brand').change(function() { $("select option:selected").each(function () { $('#modeler').load('shared/model'); }); }); }); 我知道这段代码是
$(document).ready(function(){
$('#aidmodel_brand').change(function() {
$("select option:selected").each(function () {
$('#modeler').load('shared/model');
});
});
});
我知道这段代码是有效的,因为我用一个通用jquery事件替换了最后一行,并且在选择第一个选择菜单中的选项时在页面上看到了结果
问题是,当我运行上面的代码时,浏览器会为shared/model执行一个GET请求,但我得到一个404错误。这是我可以通过routes.rb解决的问题吗
此外,我还尝试了使用单引号和双引号的.html“shared/model%>”。。单引号只会导致.html中的确切文本打印在我的modeler div中。双引号不起任何作用
我已经研究过如何通过在aidmodel控制器中创建定义和在视图/aidmodels中使用相同名称创建.js.erb的传统方法来解决这个问题,但是我不知道如何在不点击表单提交按钮的情况下触发第二个选择菜单的加载。。这是我不想要的
对不起,我的问题太长了,但我昨晚花了几个小时在这个问题上,结果我失去了充足的睡眠!谢谢
更新:
我试图用上面的代码创建一个名为scripto的js.erb部分,并使用“shared/scripto”调用它:formats=>[:js]]>。。。这似乎奏效了。。java代码被导入到我的页面中。。然而,只要我像.html一样将任何ruby代码添加到部分代码中,我就会得到一个缺少的部分错误。我应该提到,我还尝试将:handlers=>[:erb]添加到部分调用中。。。还是不走运。谢谢
更新2:
$(document).ready(function(){
$('#aidmodel_brand').change(function() {
$("select option:selected").each(function () {
$('#modeler').html('<%= escape_javascript(render(:partial => shared/model)) %>');
});
});
});
但是,我必须以:brand=>@brand.的形式将变量传递给partial。。是否有办法将var brand中的文本分配给@brand变量,以便将其传递给partial?谢谢
更新4
再次感谢穆罕默德。不幸的是,我看不到任何从分部中访问变量的方法。我认为$this.text必须以@brand的形式转换为rails实例变量,然后才能从部分数据库中访问它。另外,我认为您不能将java代码放入escape_javascript方法中,因此@brand的变量赋值必须在之前进行。有一种非常有用的方法可以渲染部分并将其保存在变量中:render_to_string。是的!您可以从js加载分区: 使用应在控制器中写入操作,该操作将返回partials并将路由添加到routes.rb配置中的in 在实际操作中,您可以在以下各种情况下对部分进行渲染: 回应待办事项|格式|
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在这里]},functiondata{[data是html或json。这是您的操作的响应]}
注意:您还可以使用js.erb或html.erb模板否,因为js无法理解Ruby代码。只有RJ可以。如果要从js调用分部,请创建一个.rjs文件,并使用shared/model从中调用它 对于您添加的更新2:
看起来不错,但请仔细检查这一行$'modeler'.html'shared/model%>;部分名称用双引号括起来。否,因为js无法理解Ruby代码。只有RJ可以。如果您想从js调用分部,然后创建一个.rjs文件,并使用shared/modelMohamed从中调用它,请参阅上面的我的更新…您在分部中的哪里添加了.html?你能出示密码吗=穆罕默德,谢谢你的回复。请参阅上面的更新2。看起来不错,但请仔细检查此行$'modeler'.html'shared/model%>;双引号中的部分名称表示有希望。今晚我要试试这个!
format.html {render :partial => 'partial1'}
format.json {render :json => {:partial1 => render_to_string(:partial => 'partial1'), :partial2 => render_to_string(:partial2 => 'partial2')}}