GVKun编程网logo

javascript – Ruby on Rails查看通过渲染插入js.erb文件(js渲染数据)

11

本文将带您了解关于javascript–RubyonRails查看通过渲染插入js.erb文件的新内容,同时我们还将为您解释js渲染数据的相关知识,另外,我们还将为您提供关于javascript–js

本文将带您了解关于javascript – Ruby on Rails查看通过渲染插入js.erb文件的新内容,同时我们还将为您解释js渲染数据的相关知识,另外,我们还将为您提供关于javascript – js.erb文件正在执行两次. Ruby on Rails – private_pub、javascript – Ruby on Rails中的通知栏、javascript – 为什么rails不呈现.js.erb文件?、javascript – 在Rails 3中处理js.erb文件的实用信息。

本文目录一览:

javascript – Ruby on Rails查看通过渲染插入js.erb文件(js渲染数据)

javascript – Ruby on Rails查看通过渲染插入js.erb文件(js渲染数据)

为了包含我在某些页面上只需要的一段javascript,我放了

 = javascript_tag do
   = render "inserts_js_enhanced_element.js.erb"

在我的haml文件中.
现在我在测试中收到警告:

DEPRECATION WARNING: Passing a template handler in the template name is 
deprecated. You  can simply remove the handler name or pass render
:handlers => [:erb] instead.`

但是,当我将线路更改为

   = render "inserts_js_enhanced_element.js", :handlers => [:erb]

无论如何,我得到一个新的警告,说

 DEPRECATION WARNING: Passing the format in the template name is 
 deprecated. Please pass render with :formats => [:js] instead.

如果我确实改变了

 = render "inserts_js_enhanced_element", :handlers => [:erb], :formats => [:js]

它给了我错误

     ActionView::Template::Error:
   Missing partial application/inserts_js_enhanced_element with {:handlers=>[:haml, :builder, :erb, :coffee], :locale=>[:de], :formats=>[:html]}. 

现在格式似乎没有改为:js和处理程序不仅仅是:erb.
我应该如何正确输入JS-ERB?

更新:

js.erb文件具有表单

 <% session_val = determine_session_val_from_config %>
 jQuery(document).ready(function() {
   //JS Code
 }

解决方法:

好:)
我想我自己找到了this SO文章的答案

= render(:partial => 'inserts_js_enhanced_element', :handlers => [:erb], :formats => [:js])

工作,并没有给我折旧警告

javascript – js.erb文件正在执行两次. Ruby on Rails – private_pub

javascript – js.erb文件正在执行两次. Ruby on Rails – private_pub

我正在研究聊天模块.为此,我使用了private_pub gem.在这个模块中,我已经制作了三个频道,但我不能在这里提到所有这些频道,因为它会显示一个非常非常大的页面.所以让我们坚持一个渠道.

我点击频道“<%= subscribe_to”/ conversation / send_invitation“%>”的链接然后ajax工作并转到“conversation / send_invitation”(只有一次 – 这没关系)和我的“/ conversations / send_invitation”我有

def send_invitation
 @conversation = Conversation.new(conversation_params)
 respond_to do |format|
 format.js { render :layout => false }
 format.html
 end
end

然后在我的send_invitation.js.erb文件中,我有以下内容

<% publish_to "/conversations/send_invitation" do %>
var recipient_id = "<%=@conversation.recipient.id %>";
var current_temp_user = $("#current_temp_user").val();

if(recipient_id == current_temp_user){
console.log('here')
$("#invitation_div").html("<%=j(render :partial => '/restaurants/invitation')%>");
    card_modal = $('#invitation_card').modal();
    card_modal.modal('show');
}
<% end %>

这是我的application.js文件

//= require jquery
// require jquery-ui
//= require jquery_ujs
// require turbolinks
//= require bootstrap
//= require jquery.raty
//= require private_pub
//= require_tree .

并且模式显示在接收方(这是好的).

现在问题是我可以在我的firefox控制台/ html中看到两个具有相同id的模态.关闭/提交模态的按钮也停止工作.我的send_invitation.js.erb文件中的console.log也显示了两次console.log结果,所以很明显js.erb文件正在执行两次.但值得注意的是,ajax只运行了一次.我浪费了几个小时就发现它只发现This link对我来说也不起作用,因为当我删除jquery.js或jquery_ujs.js时它给了我错误

解决方法

我找不到解决方案,但我认为值得某人告知实际问题.
在我的情况下,问题是我在同一页面上制作了两个频道,这就是为什么它与瘦服务器进行两次握手的原因.

注意但是在一般情况下,如果我们将js文件包含两次,也会发生这种情况.

javascript – Ruby on Rails中的通知栏

javascript – Ruby on Rails中的通知栏

我想创建一个类似于Facebook或StackExchange的通知栏.

我希望它显示带数字的通知和带有一些信息的下拉面板.

有人可以提供一个关于如何在Ruby on Rails或Javascript / jQuery中创建它的示例或教程吗?

谢谢

解决方法:

它可能是一个两阶段的过程:

>获取未完成/未读通知的计数器.在标题中显示为链接.
>添加一个jQuery处理程序,它将根据首选项在点击或悬停时通过AJAX加载消息.

第一部分很简单,如果已建立范围,则只需在关联上调用方法:

<%= link_to(@user.notifications.unread.count, user_notifications_path(@user), :class => 'notifications') %>

下一部分涉及用jQuery修补一些东西,也许是这样的:

$('.notifications').click(function() {
  $('#notifications').load(this.href);
  return false;
});

您需要具有将在#notification块中呈现的特定视图.

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

javascript – 为什么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

/messages/new.html.erb

<div>
    <div>
        <div>
            <h1>New message</h1>
            <%= render 'form' %>

            <%= link_to 'Back',messages_path,:class => "button small" %>
        </div>
    </div>
</div>

/messages/new.js.erb

$("h1").html('hello'); //for testing that it works

有什么东西我必须添加到另一个文件?是否有请求我必须加载HTML和.js?

解决方法

为什么这不起作用?

我不认为你的方法是一种特别标准的方法来实现你想要的.你的JS模板没有被加载的原因是因为你的控制器被设置为响应HTML模板,如果浏览器请求HTML,以及JS模板,如果浏览器请求JS.它永远不会返回,因为浏览器只能请求其中一个.

换句话说,控制器中的respond_to块指示控制器如何响应不同类型内容的请求,而不是列出每个请求将要发送的所有类型的内容.

解决方案1:在每个页面上加载JS

这里有几件事需要考虑.首先,仅仅因为JS没有在特定页面上使用,本身并不是加载它的好理由. Rails,通过Sprockets,将所有JS连接并缩小为单个文件.只要此文件没有更改,它就会被用户的浏览器缓存.当您的用户访问需要此JS的页面时,这将导致更快的响应,因为它不需要为获取新JS而发出额外请求.

如果你担心你的JS运行在它不应该运行的内容上,那么你应该通过向页面或页面添加一个唯一的标识符来防止这种情况发生,然后检测你的标识符. JS.例如:

$("h1.special").html('hello');

解决方案2:使用content_for

但是,在某些情况下,单独加载JS可能是有益的.在我看来,实现这一目标的最佳方法是,如果个人观点需要,可以使用块内容将内容附加到您的头上.

所以在你的应用程序布局中

#layouts/application.html.erb
<head>
  #Other head content here

  <% if content_for?(:head) %>
    <%= yield(:head) %>
  <% end %>

  #Other head content here
</head>

#messages/new.html.erb
<% content_for :head do $>
  <%= javascript_include_tag "messages_new.js" %>
<% end %>
#Other view stuff here

#assets/messages_new.js
$("h1").html('hello');

然后,messages_new.js将仅包含并因此在包含该content_for块的视图上运行.它不应出现在任何其他页面上.

解决方案3:只需在您的html中包含javascript即可

或者,如果你不关心JS是否最后加载,那么你可以在new.html.erb的底部添加include helper:

#messages/new.html.erb
#Other view stuff here
<%= javascript_include_tag "messages_new.js" %>

javascript – 在Rails 3中处理js.erb文件

javascript – 在Rails 3中处理js.erb文件

我正在转换标准脚手架生成的应用程序,以类似于http://stjhimy.com/posts/07-creating-a-100-ajax-crud-using-rails-3-and-unobtrusive-javascript中指定的方式使用AJAX和JQuery.

我按照所有说明操作:

>使用2个部分创建复合索引视图;
>更新了控制器,仅保留索引,创建,编辑,更新和销毁操作;
>为使用JQuery函数更新DOM的创建,更新和销毁操作创建了js.erb文件.

似乎无法访问js.erb文件.将js.erb放在视图文件中,例如app / views / customers / create.js.erb

create.js.erb的代码是:

<% if @customer.errors.any? -%> 

   /*Hide the Flash Notice div*/
   $("#flash_notice").hide(300);

   /*Update the html of the div customer_errors with the new one*/
   $("#customer_errors").html("<% @customer.errors.full_message.each do |msg| %>
                              

表格的代码如下:

index.html.erb文件

_form.html,erb部分文件

<%= form_for(@customer,:remote => true) do |f| %>


  
display:none">irstname %> <%= f.text_field :firstname %> <%= f.label :lastname %> <%= f.text_field :lastname %>

_customers.html.erb部分的文件是:

irstnameirstname %>

编辑

最新版本的客户控制器:

class CustomersController < ApplicationController

  before_filter :load

  def load
    @customers = Customer.all
    @customer  = Customer.new
  end

  def index   
  end


  def create
    @customer = Customer.new(params[:customer])
    if @customer.save
      flash[:notice] = "Customer was successfully created."
      @customers = Customer.all
      respond_to do |format|
        format.js
      end 

    end
  end 

  def edit
    @customer = Customer.find(params[:id])
    respond_to do |format|
      format.js
    end
  end

  def update
    @customer = Customer.find(params[:id])
    if @customer.update_attributes(params[:customer])
      flash[:notice] = "Customer was successfully updated."
      @customers = Customer.all
      respond_to do |format|
        format.js
      end   
    end
  end  

  def destroy
    @customer = Customer.find(params[:id])
    @customer.destroy
    flash[:notice] = "Customer successfully destroyed"
    @customers = Customer.all
    respond_to do |format|
      format.js
    end
  end
end

在将Jquery.js文件传递给rails.js之后,最新版本的布局模板包含如下标记

    <%= stylesheet_link_tag :all %>
      <%= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' %>
      <%= javascript_include_tag 'rails' %>
      <%= csrf_Meta_tag %>

最新日志:

Started GET "/customers" for 127.0.0.1 at Wed Dec 14 21:16:14 +0000 2011
  Processing by CustomersController#index as HTML
  Customer Load (1.3ms)  SELECT "customers".* FROM "customers"
Rendered customers/_form.html.erb (14.1ms)
Rendered customers/_customers.html.erb (28.1ms)
Rendered customers/index.html.erb within layouts/application (47.6ms)
Completed 200 OK in 74ms (Views: 56.3ms | ActiveRecord: 1.3ms)


Started GET "/customers/13/edit" for 127.0.0.1 at Wed Dec 14 21:17:20 +0000 2011
  Processing by CustomersController#edit as JS
  Parameters: {"id"=>"13"}
  Customer Load (1.1ms)  SELECT "customers".* FROM "customers"
  Customer Load (0.5ms)  SELECT "customers".* FROM "customers" WHERE "customers"."id" = 13 LIMIT 1
Rendered customers/_form.html.erb (16.1ms)
Rendered customers/edit.js.erb (17.6ms)
Completed 200 OK in 43ms (Views: 27.6ms | ActiveRecord: 1.5ms)


Started GET "/customers/13/edit" for 127.0.0.1 at Wed Dec 14 21:17:31 +0000 2011
  Processing by CustomersController#edit as JS
  Parameters: {"id"=>"13"}
  Customer Load (1.0ms)  SELECT "customers".* FROM "customers"
  Customer Load (0.3ms)  SELECT "customers".* FROM "customers" WHERE "customers"."id" = 13 LIMIT 1
Rendered customers/_form.html.erb (25.9ms)
Rendered customers/edit.js.erb (28.8ms)
Completed 200 OK in 52ms (Views: 39.0ms | ActiveRecord: 1.3ms)


Started DELETE "/customers/18" for 127.0.0.1 at Wed Dec 14 21:18:31 +0000 2011
  Processing by CustomersController#destroy as JS
  Parameters: {"id"=>"18"}
  Customer Load (1.0ms)  SELECT "customers".* FROM "customers"
  Customer Load (0.4ms)  SELECT "customers".* FROM "customers" WHERE "customers"."id" = 18 LIMIT 1
  AREL (0.4ms)  DELETE FROM "customers" WHERE "customers"."id" = 18
  Customer Load (0.7ms)  SELECT "customers".* FROM "customers"
Rendered customers/_customers.html.erb (120.3ms)
Rendered customers/destroy.js.erb (122.1ms)
Completed 200 OK in 198ms (Views: 134.1ms | ActiveRecord: 2.5ms)


Started GET "/customers" for 127.0.0.1 at Wed Dec 14 21:20:00 +0000 2011
  Processing by CustomersController#index as HTML
  Customer Load (1.6ms)  SELECT "customers".* FROM "customers"
Rendered customers/_form.html.erb (19.1ms)
Rendered customers/_customers.html.erb (23.8ms)
Rendered customers/index.html.erb within layouts/application (50.6ms)
Completed 200 OK in 76ms (Views: 54.9ms | ActiveRecord: 1.6m
最佳答案
创建表单和link_to对象时,需要确保它们具有:remote =>如果它们为true,则路由不会通过JS呈现操作.相反,它将使用默认HTML呈现它.

一个例子:

<%= form_for(@post,:remote => true) do |f| %>

要么

<%= link_to "Edit",edit_post_path(post),:remote => true %>

另外,请确保安装了最新的jQuery和jQuery Rails适配器:https://github.com/rails/jquery-ujs

作为旁注,如果您为CRUD操作执行100%ajax,则不需要在上面的代码中使用format.html,因为您将要渲染的所有内容都是JS文件(format.js).

更新:
我认为你误解了一些事情……你正在阅读的教程只谈到将CRUD(创建,读取,更新,删除)操作改为100%ajax调用,这意味着他们是唯一会回复渲染的人. js.erb文件.因此,当您检查页面是Processing SomeController#some_action为JS时,它将仅适用于您的Customers控制器中的创建,显示,更新和销毁操作.

对于Rails 3.0上的jQuery和jQuery-UJS安装,请按照以下说明操作:

Be sure to get rid of the rails.js file if it exists,and instead use the new jquery_ujs.js file that gets copied to the public directory. Choose to overwrite jquery_ujs.js if prompted.

然后运行rails generate jquery:install

将布局模板更改为:

<%= stylesheet_link_tag :all %>
<%= javascript_include_tag :defaults %>
<%= csrf_Meta_tag %>

我不得不说,你正在阅读的教程是关于我读过的最糟糕的教程.因为你似乎对Ruby on Rails很新,所以我强烈建议你阅读一个不同的教程(如果你还想阅读关于AJAX的R / Rails:http://net.tutsplus.com/tutorials/javascript-ajax/using-unobtrusive-javascript-and-ajax-with-rails-3/,或者甚至是非常好的东西,这样可以更好地学习Rails本身) :http://ruby.railstutorial.org/ruby-on-rails-tutorial-book).

今天关于javascript – Ruby on Rails查看通过渲染插入js.erb文件js渲染数据的分享就到这里,希望大家有所收获,若想了解更多关于javascript – js.erb文件正在执行两次. Ruby on Rails – private_pub、javascript – Ruby on Rails中的通知栏、javascript – 为什么rails不呈现.js.erb文件?、javascript – 在Rails 3中处理js.erb文件等相关知识,可以在本站进行查询。

本文标签: