2010-09-13 47 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

相關問題