【发布时间】:2012-04-28 15:53:12
【问题描述】:
我正在使用这个 javascript 来代替 remote_action:
$(document).ready(function() {
$('#asset_category_id').change(function() {
$.ajax({
url : '<%= escape_javascript(url_for :controller => :categories, :action => :update_subcategories) %>',
data : 'category_id=' + this.value,
success : function(data) {
$('#subcategories_div').html(data);
$('#subcategories_div').show();
}
})
});
});
以下行中的 url 格式不正确:
url : '<%= escape_javascript(url_for :controller => :categories, :action => :update_subcategories) %>'
按字面意思使用:
如何在 jQuery 中使用 url_for?有可能吗?
如果我使用
url : '/categories/update_subcategories'
一切都按预期运行。
编辑: 我没有运气尝试过以下事情。
似乎我应该使用 @Matzi 和 @Baldrick 所指出的预处理 (guides.rubyonrails.org/asset_pipeline.html#preprocessing),所以我的文件应该是 main.js.erb。我在 app/assets/javascripts 中重命名了这个文件。当我转到资产/新视图(需要文件的位置)时,出现此错误:
undefined method 'url_for' for #<#<Class:0x9853e4c>:0xab00c48>
我尝试将这两行添加到 assets_controller:
include ActionView::Helpers::UrlHelper
include ActionView::Helpers::TagHelper
然后我得到:
undefined local variable or method `controller' for #<AssetsController:0xa40aaec>
在这行视图中:
<%= form_for(@asset) do |f| %>
我也尝试将这些行添加到 new.html.erb 文件中:
<%= include ActionView::Helpers::UrlHelper %>
<%= include ActionView::Helpers::TagHelper %>
然后我得到:
undefined method `include' for #<#<Class:0xab164d0>:0xab0183c>
根据Rails 3: How to render ERb template in rake task? 在类似情况下的建议。我在视图和控制器中尝试了以下包含,结果相同:
include Rails.application.routes.url_helpers # brings ActionDispatch::Routing::UrlFor
include ActionView::Helpers::TagHelper
@Matzi 推荐的我尝试过的另一件事是将 main.js.erb 从 app/assets/javascripts/ 移动到 app/views/assets。但在这种情况下,main.js.erb 中的 Javascript 似乎不会与视图 new.html.erb 同时加载。我尝试将 main.js.erb 重命名为 new.js.erb,但文件中的 JS 似乎也没有加载。
虽然我使用 JS 来附加处理程序并使用 js.erb 来返回结果,但我需要第一个 JS 中的 url_for 才能知道在哪里调用。
所以问题仍然存在,如何在 js.erb 中使用 url_for 来尝试将更改处理程序附加到视图中的字段?
【问题讨论】:
-
哪个文件包含
$(document).ready(function() { ...代码? -
@Baldrick javascript
$(document).ready(function() { ...在 app/assets/javascripts/main.js 中肯定会加载它,因为如果我使用文字 url,它会按预期运行。 -
正如Matzi所说,应该在.js.erb文件中处理js文件中的ruby代码。在此处阅读有关预处理的更多信息:guides.rubyonrails.org/asset_pipeline.html#preprocessing