我有一个Rails 3应用程序,通过资产管道提供js文件,例如tools.js.erb。这工作正常,但我想添加一些html模板,这些模板在环境中可用作部分。
一种选择是在需要模板时通过JS的ajax调用加载模板,但这会在客户端上呈现它会增加一些延迟。
是否可以在JS中呈现部分内容并将其作为字符串存储在JS变量中,因此我可以立即注入html。这样做的最佳方式是什么?
答案 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>