首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AJAX渲染部分

AJAX渲染部分
EN

Stack Overflow用户
提问于 2012-11-17 03:44:07
回答 2查看 180关注 0票数 0

描述

我有下面的工作代码。

  • 具有链接列表的视图: <%= div_for feed do %> <%= link_to feed.name,{:控制器=>‘feed’,: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

  • 方法,该方法生成HTML: def generate_html_table r=“self.posts.order(”已发布的desc").each {溶胶-p+链接= '‘+ p.title + '’date = '‘+ p.published.to_s r += '’+ link +‘+’日期+‘}r+’结束

  • 和get_posts.js.erb: $( "#in“).html("<%= raw @result %>");

用户单击链接,generate_html_table生成插入到#id中的HTML。

问题

我想用partials来改变generate_html_table。我怎么才能拿到呢?

,我怎么试的,

  • 我创建了文件视图/feed/_posts.html.erb,其中包括: 一些静态文本

  • 我将我的get_posts.js.erb编辑为: $(“in”).html("<%= escape_javascript(呈现:分部=>‘post’)%>");

但即使是现在,静态文本也不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-17 04:14:58

看起来,控制器中有视图代码,当您将属于视图的代码放入视图时,您应该摆脱generate_html_table方法,并将其留给get_posts.js.erb,这样就可以清楚地知道您正在偏离轨道。

问题的第二部分中的get_posts.js.erb似乎是正确的,我在前面的视图代码中没有看到插入该代码的#in,您是否检查过直接调用ajax以消除ajax部分中的问题?(比如没有加载jquery-ujs或任何您正在使用的不引人注目的javascript平台)。我也没有看到任何处理remote的代码,因此从调用返回的javascript可能没有被使用。

我的建议是:

  • 摆脱generate_html_table
  • 将您想要收集的帖子(self.posts.order("published desc"))集中在控制器中,这确实属于控制器。
  • 将代码添加到页面的资产中,以处理按钮的ajax:success回调以在#in中插入html。
  • 不要在ajax调用中返回javascript,而是返回您需要插入的HTML,让客户端处理javascript部分
票数 0
EN

Stack Overflow用户

发布于 2012-11-17 05:22:07

您可以尝试更多地使用js模板。

这里的问题是,你混合了很多的责任,试着把它们再划分一些。

示例:

控制器:

可以将order移动到模型中的作用域中。

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>

注意:还没有测试过这段代码,但是这样的代码应该可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13427467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档