相关疑难解决方法(0)

使用Rails 3.1,您在哪里放置"特定于页面"的JavaScript代码?

据我所知,您的所有JavaScript都合并为1个文件.当Rails添加//= require_tree .application.js清单文件的底部时,默认情况下会执行此操作.

这听起来像是一个真正的生命保护程序,但我有点担心特定于页面的JavaScript代码.此代码是否在每个页面上执行?我想要的最后一件事是,只需要在1页上需要为每个页面实例化我的所有对象.

此外,代码是否也存在冲突的可能性?

或者你是否script在页面底部放了一个小标签,只是调用一个执行页面javascript代码的方法?

那你不再需要require.js了吗?

谢谢

编辑:我很感谢所有的答案......我认为他们并没有真正解决问题.其中一些是关于造型而且似乎没有关联...而其他人只是提到javascript_include_tag......我知道存在(显然......)但是看起来Rails 3.1的方式将会包括所有的将您的JavaScript编入1个文件,而不是在每个页面的底部加载单独的JavaScript.

我能想到的最好的解决方案是divids或classes 包装标签中的某些功能.在JavaScript代码,你只要检查idclass在页面上,如果是,您在运行与之相关联的JavaScript代码.这样,如果动态元素不在页面上,则JavaScript代码不会运行 - 即使它已包含在application.js由Sprockets打包的大量文件中.

我的上述解决方案的好处是,如果在100个页面中的8个页面中包含搜索框,则它将仅在这8个页面上运行.您也不必在网站的8个页面上包含相同的代码.实际上,您永远不必在任何地方再次在您的网站上包含手动脚本标记.

我认为这是我问题的实际答案.

javascript ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline

386
推荐指数
11
解决办法
8万
查看次数

我应该如何在一个页面上包含coffeescript文件?

编辑:一年后,如果我要再次这样做,我会用curl.js代替Rails资产管道.

相关:在Rails 3应用程序中添加页面特定javascript的最佳方法?

我正在编写一个应用程序,并使用coffeescript生成所有的js.这就是相关问题不能满足我需要的原因.

我希望能够将coffeescript文件放在我的资产目录的子文件夹中,并且只能在一个页面上提供.coffee文件.该页面位于命名路由上

match 'myNotifications' => 'user#notifications'

最明显的事情是将.coffee文件放入assets\javascripts\user\index.js.coffee.但在阅读有关资产的文档后,我不清楚.

我读了这一行(来自http://guides.rubyonrails.org/asset_pipeline.html):

您应该将任何JavaScript或CSS唯一的控件放在各自的资产文件中,因为这些文件可以仅为这些控制器加载,例如<%= javascript_include_tag params [:controller]%>或<%= stylesheet_link_tag params [ :controller]%>.

好的很酷,所以我把页面特定的js放入assets\javascripts\user.js.coffee.然后我重新加载了我的主页,按Ctrl F5.user.js文件仍在主页上加载.经测试$ -> alert 'ready from users controller'; 加载主页时看到警报.

Rails是否有办法让每页的coffeescript文件只能与该页面一起提供?我读错了吗?在assets文件夹中是否有一个地方可以放入.coffee文件,它们不会被每个页面加载?

更新:看起来我可能有一个答案:

有几种方法可以解决这个问题.我们可以使用require_directory而不是require_tree,因为这只会加载当前目录中的文件而不是子目录中的文件.如果我们想要更多地控制包含的文件,我们可以单独地要求它们而不是包括整个目录.或者,我们可以将我们想要包含在所有页面上的JavaScript文件移动到公共子目录中.然后我们可以使用require_tree ./public来包含那些文件.

我会在上午给出一个镜头.

ruby-on-rails coffeescript ruby-on-rails-3

25
推荐指数
2
解决办法
1万
查看次数

如何在Rails 3.2.1中使用特定于控制器的样式表?

使用Rails 3.2.1


我使用命令创建了一个名为Home的简单控制器:

rails g controller Home index
Run Code Online (Sandbox Code Playgroud)

它为我创建了一个新的控制器和视图:

在此输入图像描述

注意有两个样式表,一个是"应用程序",另一个是"主页".我找不到任何文档来支持这个假设,但我猜你把样式只应用于Home.css.scss文件中的"Home"视图,对吗?

因此,作为测试,我在Application.css.scss.erb中添加了一些全局样式并运行了应用程序.

样式按预期应用.

接下来,我在Home.css.scss文件中添加了一些规则,并访问了一个"Home/index"视图,但该文件中的样式未附加,既不作为单独的CSS引用链接,也不附加到单个Application.css.scss文件.这对我来说非常困惑,因为评论说:

// Place all the styles related to the Home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
Run Code Online (Sandbox Code Playgroud)

为什么Home.css.scss中写的规则不适用于我的网站?

css ruby-on-rails sass ruby-on-rails-3.1

22
推荐指数
4
解决办法
2万
查看次数

如何将CoffeeScript文件与视图相关联?

刚刚安装了rails 3.1 rc1,我试图用新资产管道来管理javascript的最佳方法默认情况下,所有coffeescript都被编译成一个application.js文件,这是一件好事.

每个单独的咖啡脚本文件都附加到js文件并包装在一个匿名函数中,该函数通过调用方法执行.常见的场景是使用一些jquery将各种表单转换为ajax表单,更新UI等...

这些脚本中的许多都是特定于控制器或动作的,我试图用"常规"方式来处理这个,因为所有内容都包含在一个匿名函数中,我如何只执行特定控制器/动作的代码,默认情况下,正在执行所有匿名函数

我确实玩了一些hacks,我将控制器和动作名称加载到js变量中,然后在coffeescript中检查那些有条件地运行代码,我不是很喜欢

我最初的想法是每个咖啡文件都包含一个js命名空间/对象,我会从视图中调用特定的那些,使用default_bare = true配置来调用它

请参阅如何在Rails 3.1 for CoffeeScript中使用选项"--bare"?

编辑

再看一些:看起来这可能是正确的方法 - 使用Rails 3.1和Coffeescript"找不到变量"错误

coffeescript ruby-on-rails-3.1

16
推荐指数
1
解决办法
3445
查看次数

在rails中为每个控制器加载Javascript

Rails中每个视图的JavaScript文件

我调查了类似的线程,但我无法抓住.下面是我的application.js文件.

//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require vendor
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

我有一个资产管道的目录结构如下.

--javascripts
 -misc // directory
   helper.js
session.js
app.js
application.js
home.js
Run Code Online (Sandbox Code Playgroud)

我如何加载所有页面的misc目录和home.js for HomeController和session.js SessionController.我不想让不需要的JS在每个地方加载.

javascript ruby-on-rails

10
推荐指数
1
解决办法
8334
查看次数

适当的"Rails"方式在特定页面上执行javascript

我试图在特定页面上运行javascript,我唯一的解决方案似乎是反模式.我在controller.js里面生成了assets/javascripts/.我正在使用gem 'jquery-turbolinks'我的代码类似于以下内容:

$(document).ready(function () {
    //Initiate DataTables ect..
    }
)
Run Code Online (Sandbox Code Playgroud)

此代码在每个页面上触发,因此我在其中添加了以下内容.

if ($('#page-specific_element').length > 0) {
    //Initiate Datatables ect.
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法设置rails只使用特定控制器所需的javascript文件或逻辑门控元素搜索最佳解决方案?

javascript jquery ruby-on-rails ruby-on-rails-4

10
推荐指数
1
解决办法
1854
查看次数

为什么rails不呈现.js.erb文件?

我有一个rails应用程序,我试图让jQuery呈现一个HTML文件.这一点的意思是jQuery是特定于页面的,所以我不希望它通过将它放在标题中来加载每个页面.这是我对文件所做的

messages_controller.rb

 # GET /messages/new
 def new
    @message = Message.new
    @users = User.where('id != ' + current_user.id.to_s)
    #if @message.save
       #MessageMailer.new_message(@message).deliver

    respond_to do |format|
       format.html # new.html.erb
       format.js
    end
    #end
 end
Run Code Online (Sandbox Code Playgroud)

/messages/new.html.erb

<div class="row">
    <div class="large-12 columns">
        <div class="panel">
            <h1>New message</h1>
            <%= render 'form' %>

            <%= link_to 'Back', messages_path, :class => "button small" %>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

/messages/new.js.erb

$("h1").html('hello'); //for testing that it works
Run Code Online (Sandbox Code Playgroud)

有什么东西我必须添加到另一个文件?是否有我要做的请求,所以它加载HTML和.js?

javascript jquery ruby-on-rails

8
推荐指数
3
解决办法
2万
查看次数

加载页面后自动加载javascript函数

我是Rails的新手,现在还不太了解资产管道…

我想让

views/product/product.js 
Run Code Online (Sandbox Code Playgroud)

之后自动射击

views/product/index.html.erb 
Run Code Online (Sandbox Code Playgroud)

由于DRY原因而被渲染。

加载任何或部分model.erb文件后,资产管道中是否有一个地方调用model.js文件?

我知道如何手动操作,并删除了

app/assets/javascripts/product.js
Run Code Online (Sandbox Code Playgroud)

但是然后我必须在新的show中调用doSomethingAfterPageload()方法。删除等。甚至更好,如果这也适用于部分。

javascript ruby-on-rails actionview asset-pipeline

6
推荐指数
1
解决办法
4754
查看次数

在某些页面的标题中插入特定的js - 活动管理员

我使用主动管理员,在我的应用程序中有不同的.js必须加载到特定页面(不是全部).

关注此主题在Rails 3应用程序中添加页面特定javascript的最佳方法?它看起来很简单,但是编译了活动管理员中的布局.

我使用了一种解决方法来覆盖页脚:

    class ActiveAdmin::Views::Pages::Base < Arbre::HTML::Document
 private
  # Renders the content for the footer
  def build_footer
    div :id => "footer" do
      para "Copyright &copy; #{Date.today.year.to_s}- All rights reserved ".html_safe
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如何在某些页面的标题中添加一些.js?如何解决方法?(如果可能的话,使用"yield:head"或类似的东西,所以我可以从任何地方轻松地调用它;))

编辑注意:我想要包含的js渲染一个highcharts

jquery ruby-on-rails head highcharts activeadmin

3
推荐指数
1
解决办法
4251
查看次数

如果复选框在轨道上的ruby中被锁定,则显示表单的其余部分

我需要问我的用户是否会使用信用卡支付服务...如果它选中了pay_with_card选项?它必须显示表格的其余部分,要求其他数据,如卡号,邮件等,如果用户没有检查它,它必须显示一条消息,问题是......我该怎么做?提前致谢

<%= form_for(@product) do |f| %>
  <%= f.label :pay_with_card? %>
  <%= f.check_box :pay_with_card,{}, "Yes", "No"%>
  <div>
    <%= f.label :card_number %> <%= f.text_field :card_number %>
  </div>  
  <div>
    <%= f.label :mail %> <%= f.text_field :mail %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

forms checkbox ruby-on-rails checkedtextview

1
推荐指数
2
解决办法
9449
查看次数