标签: rjs

Javascript在Rails应用程序中包含标记最佳实践

假设我需要在<head>ERb模板中调用javascript文件.我的直觉是做平常的事情:

<head>
<%= javascript_include_tag :defaults %> <!-- For example -->
</head>
Run Code Online (Sandbox Code Playgroud)

在我的应用程序的布局中.当然问题是这些javascript文件被加载到我的应用程序的每个页面中,无论它们是否被查看的页面都需要.

所以我想知道的是,是否有一种很好的方法可以将javascript加载到标题中,例如,只在特定目录中找到的所有ERb模板.

javascript ruby-on-rails header rjs

61
推荐指数
2
解决办法
5万
查看次数

(Rails)什么是"RJS"?

我在博客文章和教程中看到了"RJS"和"RJS模板".我做了一个搜索,但我仍然不确定.它是Rails特有的技术,而不是像JSON或YAML这样的标准吗?

我知道它用于"生成JavaScript".它是否生成了需要Prototype和Scriptaculous库的通用JS或Rails特定的JS?

ajax ruby-on-rails rjs prototypejs

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

Rails 3:简单的AJAXy页面更新?

我不敢相信我这个简单的任务已经花了四个小时,但我有.

在Rails 2.3中,我可以用这个简单的代码替换页面的一个部分:

渲染:更新do | page | page.replace_html"div_id",:partial =>"new_content",...结束

在Rails 3中,Ryan Bates让我编写了全新的javascript函数,从Prototype(rails默认)切换到jQuery,否则就不能享受生活.其他的tutes不再那么简单.

我错过了什么?我们如何取代<div>这些日子?

jquery ruby-on-rails rjs

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

在Rails中破解RJS行为5

我有一个旧的rails 2.x项目,我已将其转换为rails 5.

一个问题是我的一些操作使用了RJS,所以它看起来像:

if request.xhr?
  render :action => 'new_user' and return
end
Run Code Online (Sandbox Code Playgroud)

new_user.js.rjs看起来像:

page.call "User.create", render(:partial => 'new_user'), {:userId => @user.id}
Run Code Online (Sandbox Code Playgroud)

看看chrome中的响应我可以看到它刚刚返回:

User.create('<tr><td>....</td></tr>', {"userId" : 123});
Run Code Online (Sandbox Code Playgroud)

我只需要支持page.call类型的RJS调用,在rails 5中使用它会是一个简单的"hack"吗?

我不想修改我的所有javascript代码,我只需要一个javascript块,我将JS代码传递到我的视图页面中吗?

ruby-on-rails rjs

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

RJS是邪恶的吗?为什么?

我听到一群铁路开发人员说RJS是邪恶的.我从来没有用过它,因为我总是设法用经典的javascript或jquery做我想做的事所以我没注意.现在我进入了一些遗留代码,并且到处都有RJS.

那么......这是真的吗?使用RJS有什么缺点/优点?

javascript ruby-on-rails rjs

9
推荐指数
2
解决办法
1980
查看次数

Rails 3.2.2不执行rjs

我正在关注使用Rails第4版的Pragmatic Agile Web Development,但是我正在使用Rails 3.2.2而不是3.0.5,如本书所推荐:

~$ ruby -v
ruby 1.9.3p125 (2012-02-16) [i686-linux]
~$ rails -v
Rails 3.2.2
Run Code Online (Sandbox Code Playgroud)

我在包括AJAX重绘购物车而不重新加载页面时陷入困境.这是line_items_controller.rb中的create动作:

def create
    @cart = current_cart
    product = Product.find(params[:product_id])
    @line_item = @cart.add_product(product.id)

    respond_to do |format|
      if @line_item.save
        format.html { redirect_to(store_url) }
        format.js 
        format.json { render json: @line_item, status: :created, location: @line_item }
      else
        format.html { render action: "new" }
        format.json { render json: @line_item.errors, status: :unprocessable_entity }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

这是我的RJS文件create.js.rjs(在app/views/line_items下):

page.alert('NO PROBLEM HERE')
page.replace_html('cart', render(@cart))
Run Code Online (Sandbox Code Playgroud)

但是,当我单击启动此操作的按钮时:

<%= button_to 'Add to …
Run Code Online (Sandbox Code Playgroud)

javascript ruby ajax ruby-on-rails rjs

9
推荐指数
2
解决办法
5646
查看次数

将多个rails变量传递给javascript

我在ruby(变量和对象/哈希)中有一些值,我想在渲染页面上传递给javascript.目前我使用这些方法简单地编写在客户端声明变量的javascript.

  def declare_as_js_vars vars
    string = ""
    vars.each do |name, value|
      string += self.declare_as_js_var(name, value)
    end
    string
  end

  def declare_as_js_var name, value
    name.to_s + "='" + value.to_s + "';"
  end
Run Code Online (Sandbox Code Playgroud)

这里的问题是我无法声明对象,并且必须单独声明变量.我想知道是否有一些方法可以轻松地做到这一点,因为这是一个非常黑客.

我应该如何将变量和对象传递给javascript?请提供一些语法示例

javascript ruby-on-rails rjs ruby-on-rails-3 ruby-on-rails-3.1

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

在Ruby on Rails中,当AJAX调用失败时,重定向到500页

我正在使用Ruby on Rails构建的应用程序,现在的错误处理非常糟糕.如果通过ajax执行控制器方法,并且该方法导致500(或404或任何其他响应),则呈现500.html页面并将其作为结果返回给AJAX请求.显然,javascript不知道如何处理该HTML,网页看起来只是在等待响应.

在使用AJAX调用期间发生错误时,rails中是否有一种简单的方法可以呈现error.rjs模板?

ruby ajax ruby-on-rails rjs

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

Ruby on Rails国家/州选择Enigma

我正在努力实现一些看似非常简单的事情,而且我已经在这几天打了我的脑袋.

我想要的最终结果是国家选择下拉列表,与状态选择下拉列表相关联,这样当选择给定国家/地区时,IF状态已知,然后这些状态将显示在选择下拉列表中,如果对于该国家/地区不知道任何州,然后显示文本字段.

我觉得我快到了.此时,接口实际上将根据人员的国家生成状态列表,除非它拒绝动态更新下拉列表.

我的视图中收集国家和州位置的部分看起来像:

# _person_setup.html.erb
         <td>
        <%= f.label :country, 'Select your country' %>*<br />
        <%= f.select :country, Carmen::country_names, {}, 
          {:style => 'width: 200px', 
          :id => 'country_select',
          :onchange => remote_function(
            :url => {:action => 'update_states'},
            :with => "'country='+value")} %>            
      </td><td>
        <p>
        <div id="states_div">
            <%= render :partial => 'states', 
                :object => Carmen::states(
                            Carmen::country_code(
                              @person.country)),
                :locals => {:form => f} %>
       </div>
        </p>            
      </td>    
Run Code Online (Sandbox Code Playgroud)

DIV中引用的部分如下:

 # _states.html.erb
<% unless states.nil? or states.empty? %>
    <%= form.label :state, 'Select your state' %>*<br />
    <%= …
Run Code Online (Sandbox Code Playgroud)

ruby ajax ruby-on-rails rjs

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

无法从Rails控制器呈现JavaScript

我想显示一个带有错误消息的模态窗口,当用户在表单中输入了无效内容时,如果一切正常,则显示另一个操作.但是,当我尝试显示模态窗口时

render :js => "jQuery.facebox(#{...})"
Run Code Online (Sandbox Code Playgroud)

仅显示实际调用的JavaScript:

try {
  jQuery.facebox(...)
} catch (e) { alert('RJS error:\n\n' + e.toString());
  alert('jQuery.facebox(\"<div class=\'error\'>Error</div>\")');
  throw e;
}
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rjs

6
推荐指数
2
解决办法
6868
查看次数