2010-09-13 80 views
0

我的控制器是由搜索结果页面中的链接共享的,其中需要一个布局,并且从配置文件页面本身确定不需要布局。我想完成的是单个控制器方法show,它既能够从配置文件页面中通过AJAX绘制部分图像,又能从搜索结果中绘制部分和布局。是否有一个AJAX函数,可以只是获得一个rails部分?

我拥有的最重要的限制是我无法将dataType:设置为script。它具有html。所以我不能使用那个精巧的AJAX脚本调用,它会在没有控制器的format.html的情况下呈现JS。

tabs_controller.js

def show 
    @organization = Organization.find(params[:organization_id]) 
    @tab = @organization.tabs.find(params[:id]) 
    respond_to do |format| 
    format.html { render :partial => 'tab', :layout => 'myHQpage' } 
    format.js 
    end 
end 

的JavaScript

$.get($(this).attr('href'), null, null, "html"); 

show.html.haml

= render :partial => 'tab' 

什么AJAX福我可以在这里使用哪些只是绘制局部而不是整个布局?

回答

0

我不确定要真正理解,但这可能会对您有所帮助。 呦可以将一个:layout => false添加到format.js块。

def show 
    @organization = Organization.find(params[:organization_id]) 
    @tab = @organization.tabs.find(params[:id]) 
    respond_to do |format| 
    format.html { render :partial => 'tab', :layout => 'myHQpage' } 
    format.js { render :partial => 'tab', :layout => false } 
    end 
end 
+0

原因不起作用。是我正在尝试**不**在ajax中使用'script'调用。所以format.html必须设置为“false”。但是这两个查询都在使用它。哈,对不起,如果这是混乱。我一直在重新编辑它,使其尽可能简单:) – Trip 2010-09-13 20:25:09

+0

还值得注意的是,尽管它是无法解释的,但是当您为脚本设置AJAX请求时,它会跳过布局参数。 – Trip 2010-09-13 20:38:44

0

保留“脚本”数据类型设置,并在搜索结果周围添加一个wrappertag。然后使用jQuery replaceWith函数替换该标记的内容:

_tag.html.erb: 
<div id="search"> 
    ... 
</div> 

show.js.erb: 
$('#search').replaceWith('<%= escape_javascript(render "tab") %>'); 
+0

就像我上面说的,我**不能**使用'script',因为当我通过AJAX调用用户生成的内容来传递脚本时,它会在100个调用中创建1个未终止的字符串错误。所以它**在通话中是**。否则,没问题。我原本有你的答案:D – Trip 2010-09-13 22:38:23

相关问题