当用户从第一个选择菜单中选择一个选项时,我尝试加载第二个选择菜单。这是我的 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 中。双引号不执行任何操作。
我已经考虑通过传统方法解决问题,即在我的辅助模型 Controller 内创建定义并在具有相同名称的 View /辅助模型内创建 .js.erb,但我不知道如何触发加载第二个选择菜单没有点击表单提交按钮..我不想要。
很抱歉问了这个冗长的问题,但我昨晚花了几个小时在这个问题上,结果失去了充足的 sleep !谢谢!
更新:
我尝试使用上面的代码创建一个名为 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());
但是,我必须以 :brand => @brand 的形式将变量传递给局部变量。有没有办法将 var Brand 中的文本分配给 @brand 变量,以便可以将其传递给局部变量?谢谢!
更新4
再次感谢穆罕默德。不幸的是,我没有看到任何从部分内部访问变量的方法。我认为 $(this).text() 必须先转换为@brand 形式的rails 实例变量,然后才能从部分内部访问它。另外,我认为您不能将 java 代码放入 escape_javascript 方法中,因此必须先将变量分配给@brand。
最佳答案
不能,因为js无法理解Ruby代码。只有 rjs 可以。如果您想从 js 调用部分内容,请创建一个 .rjs 文件并使用 <%= escape_javascript(render(:partial => shared/model)
从中调用它。
对于您添加的更新 2:
看起来不错,但请仔细检查这一行 $('#modeler').html('<%= escape_javascript(render(:partial => "shared/model")) %>');
双引号中的部分名称。
关于jquery - 是否可以直接从 application.js 渲染部分内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9456388/