2009-11-05 54 views
2

当我解决了这个问题时,我在网站上工作,我的博客有100个帖子,我一次给他们分配10个,我显示第15个并显示链接底部基本上是使用link_to_remote标签实现的。关于RJS和使用link_to_remote的问题

<%= link_to_remote "More Posts", :url => {:action => 'view' ,:id => link.to_i + 1} , :html => {:id => 'more-link'} %> 

我点击那个和得到下一个15个职位,并将其追加到通过insert_html含1 15个职位现在

page.insert_html :bottom, :puzzles , :partial => 'puzzles', :object => @puzzles 

我想要的容器在的底部的链接页面进行更新,以便下次用户点击更多的第三个批次时提取等等。基本上就像

page.replace_html 'more-link', link_to_remote "More Posts", :url => {:action => 'view' ,:id => link.to_i + 1} , :html => {:id => 'more-link'} 

任何线索,我怎么能做到这一点?

回答

2

你非常接近。

用(DOM_id,渲染选项)调用replace_html。基本上你想渲染一个link_to_remote调用的输出。但是你没有通过渲染可以使用的形式传递它。正如Barry Hess所指出的,替换更适合这项任务,因为大部分改变的都是标签属性。

使用replace_html会导致可能导致问题的嵌套标记。你想完全替换元素。 Replace与replace_html具有相同的语法,因此如果您只是替换replace_html,则会遇到同样的问题。

这里有你想要的东西:

page.replace 'more-link', :text => link_to_remote "More Posts", 
    :url => {:action => 'view' ,:id => link.to_i + 1} , 
    :html => {:id => 'more-link'} 

但是我不知道如果link_to_remote是RJS访问。如果以上不工作,你总是可以做到这一点:

page.replace 'more-link', :inline => "<%= link_to_remote 'More Posts', 
    :url => {:action => 'view' ,:id => link.to_i + 1}, 
    :html => {:id => 'more-link'} %>", :locals => {:link => link} 
+2

实际上,将'page.replace'更好地工作时,将替换整个元素,而不仅仅是内部HTML。也可以为这个特定的'link_to_remote'创建一个辅助方法,这样所有的URL和HTML参数都不会重复。 – 2009-11-05 15:07:19

+0

@巴里,你完全正确的替换与replace_html。事实上,替换\ _html对于这项工作是完全错误的。我已经更新了您的建议的答案,并提供了有关替换\ _html错误的解释。 – EmFi 2009-11-05 15:47:30

+0

你给我的解决方案完美的工作,现在如果我想在rjs文件中有条件,基本上如果链接== -1的值我想用一个禁用的html属性替换链接,我该怎么做? – Shiv 2009-11-06 16:53:17