相关疑难解决方法(0)

在Rails 3应用程序中添加特定于页面的JavaScript的最佳方法?

Rails 3有一些不引人注目的JavaScript,非常酷.

但我想知道最好的方法是为特定页面添加额外的JavaScript.

例如,我之前可能做过的事情:

<%= f.radio_button :rating, 'positive', :onclick => "$('some_div').show();" %>
Run Code Online (Sandbox Code Playgroud)

我们现在可以用类似的东西使它不引人注目

<%= f.radio_button :rating, 'positive' %>

# then in some other file
$('user_rating_positive').click(function() {
  $('some_div').show();
}
Run Code Online (Sandbox Code Playgroud)

所以我想我的问题是在哪里/如何包含JavaScript?我不想填写该application.js文件,因为此JavaScript仅适用于此视图.我应该以某种方式为每个页面包含一个自定义JavaScript文件,还是将其粘贴在标题所查找的实例变量中?

javascript ruby-on-rails ruby-on-rails-3

157
推荐指数
6
解决办法
8万
查看次数

Rails 3.1资产管道:如何加载特定于控制器的脚本?

如果我在Rails 3.1中生成一个新的控制器,也会自动添加一个带有控制器名称的javascript文件.首先,我认为这个javascript文件只会在调用相关控制器时使用.

默认情况下//= require_tree .,application.js-file中有指令,包括树上的每个javascript文件.

我怎么才能加载控制器特定的脚本?

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

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

Rails中每个视图的JavaScript文件

根据'不引人注目的JavaScript'建议,我想将我的JavaScript逻辑分成
单独的文件.但是我不知道如何组织它们.

我是不是该:

  1. 只需将所有应用程序javascript抛出到Application.js文件中并使用布局页面加载它?这是一个简单的方法,但我最终会得到一个膨胀的Application.js.有些用户可能只想访问几页,但整个文件会预先加载,这是不好的.
  2. 或者我应该为每个视图创建一个单独的javaScript文件并单独加载它们?这会产生一系列问题.如何将每个js文件链接到相应的视图?
    谢谢.

javascript ruby ruby-on-rails

54
推荐指数
3
解决办法
4万
查看次数

将javascript放在一个.js文件中或将其分解为多个.js文件?

我的Web应用程序使用jQuery和一些jQuery插件(例如验证,自动完成).我想知道是否应该将它们粘贴到一个.js文件中,以便可以更轻松地缓存它,或者将它们分解为单独的文件,并且只包含我需要的给定页面.

我还要提一下,我关注的不仅是下载.js文件所需的时间,还包括根据加载的.js文件的内容减慢页面的速度.例如,添加自动完成插件往往会使我的基本测试的响应时间缩短100ms,即使在缓存时也是如此.我的猜测是它必须扫描DOM中导致此延迟的元素.

javascript

46
推荐指数
3
解决办法
4万
查看次数

Rails 3:在哪里放javascript的好经验法则?

在为网站中的特定页面编写javascript时,您何时想将javascript转换为函数并将其包含在内application.js

我已经看到了关于这样做(以及缩小或gzip-ing)的建议,以最小化HTTP请求.这是有道理的,但可维护性呢?如果我有一个特定于一个视图的js代码,那么看起来更有意义的是看一个潜在的大量application.js.该代码可以嵌入到该视图中,也可以放在该视图文件夹中的自己的.js(.js.erb.rjs)文件中.

我已经看到另一个建议,Rails会自动将所有javascript合并到一个文件中.这是真的?

TLDR:开发人员在编写javascript时担心优化需要多少或多少?

javascript optimization ruby-on-rails-3

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

使用 Rails 6,你把“页面特定”的 JavaScript 代码放在哪里?

我的问题与使用 Rails 3.1相同,您将“特定于页面的”JavaScript 代码放在哪里?,仅适用于 Rails 6 而不是 Rails 3.1。

假设我有一些 JavaScript 想要用于我的帖子索引页面。我把那个文件放在哪里,我如何包含它?

在上一个问题中,答案通常使用 Rails Asset Pipeline。但是,对于 Rails 6,我的理解是它使用 webpacker 而不是 JavaScript 文件的 Asset Pipeline。

注意:我不希望始终包含该文件。例如。如果我在作者索引页上,我不希望包含帖子索引页的 JavaScript 文件。为什么?想象一下,我$('li').on('click', changeColor);在 JS 文件中拥有帖子索引页面。我可能不希望该代码在作者索引页上运行,但如果包含该文件,它就会运行。您可以通过命名空间来解决这个问题,但我认为不包含不必要的文件会更干净(并且性能更高)。

ruby-on-rails webpacker ruby-on-rails-6

21
推荐指数
2
解决办法
5734
查看次数

如何使用Rails资产管道进行每页javascript

我理解,出于性能原因,最好让资产管道连接并缩小我的所有javascript,并将每个页面请求发送到整个批次.这很公平

但是,我的一堆javascript就像是将特定行为绑定到特定的页面元素之类的东西

$('button').click(function(e) { $('input.sel').val(this.name); }
Run Code Online (Sandbox Code Playgroud)

如果我知道这个代码只在那个页面上执行,我会感觉更舒服 - 而不是在其他页面上可能巧合地使用相同ID或匹配相同选择器的元素人们如何处理这个?

我宁愿不把所有这些东西都放在元素内联中,只是因为当它长度超过两行时,保持javascript正确缩进到.html.erb文件中是比它需要更多的工作

javascript ruby-on-rails asset-pipeline

14
推荐指数
1
解决办法
3854
查看次数

在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不呈现.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 BEST PRACTICE - 管理脚本/代码重用

阅读许多文章,例如如何在另一个JavaScript文件中包含JavaScript文件?- 显然不可能将一个脚本包含在另一个脚本中.

所以这是我的问题 - 我担心JS膨胀.或者有太多未使用的代码加载不使用/不需要它的页面.但是,偶尔,我需要在多个页面上使用相同的功能,但不是所有页面.

如果我们将在线应用程序的逻辑部分放入对象(例如"客户"或"项目")中,我们可能会有一堆特定于每个"对象"的代码.

作为一个例子,我可以有一个"配置文件"代码组,允许我管理我的配置文件,它可能有多个使用Ajax的div-pop-up,并且为了这个例子,让我说我已经有一些控制我的"送货地址"的功能,他们控制div-pop-up,他们处理特定于该信息的Ajax. - 假设我有4个功能用于此目的.但这只是一个更大的'profile.js'文件的一部分,它处理我的所有"个人资料"...

现在我有了应用程序的另一部分 - 例如购物车 - 我需要允许用户访问"送货地址"div-pop-up和所有Ajax功能.

我想我想重新使用profile.js中的那些函数 - 因为看起来像'重写'代码的'坏形式'做同样的事情 - 因为那时我会有长期的代码维护问题 - 如果我做了改变 - 我必须记住我使用该代码的所有地方.

因此,如果我要推断出"最佳实践" - 考虑到这些技术如何工作的局限性 - 我不能'嵌套'并重新使用js,就像我服务器端包含OR CSS一样.

我的代码将被分解为单独的文件,并且(理论上)将使用许多较小的.js文件

所以我的<head>样子会是这样的

<head>
<script src='smallfile_1.js'...>
<script src='smallfile_2.js'...>
...
<script src='smallfile_10.js'...>
<head>
Run Code Online (Sandbox Code Playgroud)

和"IF"我需要另一页的一节

<head>
<script src='that_other_object_/smallfile_3.js'...>
</head>
Run Code Online (Sandbox Code Playgroud)

...对这些较小的文件的重复TTP调用不会成为开销吗?在繁忙的流量应用中 - 似乎网络和服务器开销可能开始成为一个问题,或者只是在鼹鼠山上建造一座山?

100k请求10个5k文件,真的相等 - 100k请求1个50k文件?

现在我把它写出来 - 并考虑一下 - 页面上的每个图像也是对服务器的单独调用 - 所以也许我正在用一些不是问题的问题来解决问题.

我是否可以获得一些反馈,了解其他人在跨模块的JS代码重用方面做了什么 - 没有在模块之间共享"巨大"文件.

javascript code-reuse

7
推荐指数
1
解决办法
2812
查看次数