描述
我有下一个工作代码。
查看链接列表:
<%= div_for feed do %>
<%= link_to feed.name, { :controller => 'Feeds', :action => "get_posts", :id => feed.id },
:remote => true %>
<% end %>
当用户点击链接时,控制器可以正常工作:
def get_posts
@result = Feed.find(params[:id]).generate_html_table
respond_to do | format |
format.js {render :layout => false}
end
end
生成HTML的方法:
def generate_html_table
r = "<table>"
self.posts.order("published desc").each { |p|
link = '<a href=' + p.link + '>' + p.title + '</a>'
date = ' ' + p.published.to_s
r += '<tr><td>' + link + '</td><td>' + date + '</td></tr>'
}
r + '</table>'
end
get_posts.js.erb:
$( "#in" ).html("<%= raw @result %>");
用户点击链接,generate_html_table genetares插入#id div的HTML代码。
问题
我想用partials更改generate_html_table。我怎么能得到它?
我是如何尝试的?
我创建了文件视图/ feeds / _posts.html.erb,其中包含:
some static text
我将我的get_posts.js.erb编辑为:
$( "#in" ).html("<%= escape_javascript(render :partial => 'posts' )%>");
但即使是现在,使用静态文本也无效。
答案 0 :(得分:0)
看起来您在控制器中有视图代码,您应该摆脱generate_html_table
方法并将其留给get_posts.js.erb
,当您放置属于视图的代码时知道你要离开了。
问题第二部分中的get_posts.js.erb
似乎是正确的,我在前一个视图代码中没有看到#in
将插入代码,您是否检查过调用ajax URL直接丢弃ajax部分的问题? (就像没有加载jquery-ujs
或者你正在使用的任何不显眼的javascript平台)。我也没有看到任何处理remote
的代码,因此可能没有使用从调用返回的javascript。
我的建议是:
generate_html_table
self.posts.order("published desc")
)收集到控制器中,该控件属于控制器ajax:success
回调,以便在#in
答案 1 :(得分:0)
您可以尝试使用更多js模板
这里的问题是你混合了很多责任,试着把它们分开一点。
控制器:
您可以将order
移动到模型中的范围内。
def get_posts
@posts = Feed.find(params[:id]).order("published desc")
respond_to do | format |
format.js
end
end
型号:
generate_html_table
方法。 查看:强>
在视图模板中实施旧的generate_html_table
<div id="in">
<table>
<% @posts.each do |p| %>
<tr>
<td> <%= j (link_to p.title, p.link) %> </td>
<td><%= j p.published.to_s %> </td>
</tr>
<% end %>
</table>
</div>
注意:Haven没有测试这段代码,但是这样的事情应该可行。