Rails 3在JS文件中渲染部分

时间:2014-12-16 19:18:45

标签: javascript ruby-on-rails ruby-on-rails-3 partials

我有一个Rails 3应用程序,通过资产管道提供js文件,例如tools.js.erb。这工作正常,但我想添加一些html模板,这些模板在环境中可用作部分。

一种选择是在需要模板时通过JS的ajax调用加载模板,但这会在客户端上呈现它会增加一些延迟。

是否可以在JS中呈现部分内容并将其作为字符串存储在JS变量中,因此我可以立即注入html。这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:0)

是的,你可以这样做:

var container = $("#your_container");
var myPartial = "<%= j render( :partial => 'directory/your_partial' ) %>";

// on.click, or whatever...
container.prepend(myPartial);

不确定您是否要预先添加或替换HTML,但这可以让您走上正确的轨道。好的调用在Javascript变量中保存部分标记。应该加快速度。

答案 1 :(得分:0)

你要添加/更新的HTML需要一些变量,你必须让服务器旅行,并且会重新加载你的dom。否则,如果它是静态内容,您可以遵循此方法。只需在您的操作中创建一个变量,就像这样。

@my_view_content = render_to_string partial: 'path_to_partial', formats: ['html'], layout: false, object: something

现在,您可以使用此变量或将此变量传递给JS文件。

var my_view_content_string = = "#{@my_view_content}"

答案 2 :(得分:0)

如果您选择的选项很少,为什么要将视图存储在变量中?为什么不能使用条件 ..例如show.js.erb

<% if condition %>

  $('#div1').html("<%= escape_javascript(render(:partial => 'pages/show')) %>");

<%else%>

  $('#div1').html("<%= escape_javascript(render(:partial => 'users/show')) %>");

<%end%>

这是其他方式......

###check of a condition in your view and then add element and call ajax

   <%if current_user.sign_in_count == 1 && current_user.confirmed?  %>
            <%= hidden_field(:new_user, :first_login, :value => current_user.sign_in_count)%>
  <%end%>    



  <script type="text/javascript">
$(document).ready(function() {
 //check if element is present in the dom and then call ajax
  if ($('#new_user_first_login').length) {
        $.ajax({
          //CALL AJAX
        })

  }
  })//document ends​
 </script>