Javascript / Jquery 选择器 ($) 在 rails def
Javascript / Jquery selector ($) in a rails def
我在 html.erb 文件中有以下代码。它适用于该页面。我想将它移动到应用程序控制器中的 def 中。当我尝试这样做时, $ 显示为意外的坏字符。
有没有办法将此代码移动到 def 中?
<!-- -------------- Begin Dirty Form Checker -->
<%= javascript_include_tag "jquery.are-you-sure.js" %>
<%= content_for(:body_attributes) do %> data-no-turbolink <% end %>
<script>
var do_on_load = function() {
$('form').areYouSure( {'silent':false} );
$('form').areYouSure();
}
$(document).ready(do_on_load)
$(window).bind('page:change', do_on_load)
</script>
这是错误的。您没有将 javascript 放在您的 ApplicationController 中。 Rails 中的 Javascript 是一个视图问题,最佳做法是尽可能避免混合使用 Ruby(或任何其他服务器端语言)和 Javascript*.
您将 javascript 放入外部文件 (app/assets/javascripts/*.js
)。与其以页面为基础考虑您的脚本,不如将 javascript 视为一组可扩展的行为,您可以将其添加到应用程序的元素中。
使用 classes 或 data-*
属性来定位元素,使用数据属性和 JSON 在客户端和服务器端之间传递数据。
// app/assets/javascripts/supa_form.js
$(document).on('page:change', function(){
$('.supa-form').submit(function(){
if (!window.confirm('Are you sure?')) {
return false;
}
});
});
为什么?
- 允许在部署时编译和最小化 javascripts。
- 允许 javascripts 被有效缓存。
- 允许 javascript 独立于 rails 应用程序进行测试。
- 混合使用 javascript 和服务器端渲染的新手会对何时何地发生的事情感到困惑。
- 避免混合数据和逻辑。
补充阅读:
我在 html.erb 文件中有以下代码。它适用于该页面。我想将它移动到应用程序控制器中的 def 中。当我尝试这样做时, $ 显示为意外的坏字符。
有没有办法将此代码移动到 def 中?
<!-- -------------- Begin Dirty Form Checker -->
<%= javascript_include_tag "jquery.are-you-sure.js" %>
<%= content_for(:body_attributes) do %> data-no-turbolink <% end %>
<script>
var do_on_load = function() {
$('form').areYouSure( {'silent':false} );
$('form').areYouSure();
}
$(document).ready(do_on_load)
$(window).bind('page:change', do_on_load)
</script>
这是错误的。您没有将 javascript 放在您的 ApplicationController 中。 Rails 中的 Javascript 是一个视图问题,最佳做法是尽可能避免混合使用 Ruby(或任何其他服务器端语言)和 Javascript*.
您将 javascript 放入外部文件 (app/assets/javascripts/*.js
)。与其以页面为基础考虑您的脚本,不如将 javascript 视为一组可扩展的行为,您可以将其添加到应用程序的元素中。
使用 classes 或 data-*
属性来定位元素,使用数据属性和 JSON 在客户端和服务器端之间传递数据。
// app/assets/javascripts/supa_form.js
$(document).on('page:change', function(){
$('.supa-form').submit(function(){
if (!window.confirm('Are you sure?')) {
return false;
}
});
});
为什么?
- 允许在部署时编译和最小化 javascripts。
- 允许 javascripts 被有效缓存。
- 允许 javascript 独立于 rails 应用程序进行测试。
- 混合使用 javascript 和服务器端渲染的新手会对何时何地发生的事情感到困惑。
- 避免混合数据和逻辑。
补充阅读: