2012-02-09 130 views
3

我有一個帶有部分視圖的網頁,它有一個按鈕並顯示一些信息。當用戶點擊這個局部視圖中的按鈕時,我需要能夠在被調用的動作中從控制器更新該局部視圖。具體來說,我想更新一個字符串。這是到目前爲止我的代碼,但它不工作..Rails:如何在頁面上重新渲染局部視圖?

局部視圖(_printLabel.rhtml)

<% if @printAsinEnabled %> 
      <%= check_box_tag(:needPrint, :needPrint, false, 
      :onchange => "if (this.checked) $('printLabelAction').show(); else $('printLabelAction').hide();") %> 
      <%=_('Need to print label?')%><br /><br /> 
      <div id="printLabelAction" class="action" style="display:none;"> 
       <% onPrintLabelClick = generateAjaxRequest(
        {:controller => @controller.controller_name, 
        :action => 'processPrintLabelRequest', 
        :creturnWipItemId => creturnWipItemId, 
        :barcode => collectedItemData.fnsku, 
        :title => asinInfo["title"]}, 
        ["parameters: Form.serializeElements([$('printerAddress'),$('printerRemote_true'),$('printerRemote_false')])"]) %> 
       <%=_('Printing')%>: <%= collectedItemData.fnsku %> <br /> <br /> 
      <%= radio_button_tag(:printerRemote, :false, !session[:printRemote]) %> 
      <label for="printerRemote_false"><%=_('Local Printer')%></label> <br /> 
      <%= radio_button_tag(:printerRemote, :true, session[:printRemote]) %> 
      <label for="printerRemote_true"><%=_('Remote Printer')%> - <%=_('Printer Address')%>:</label> 
      <%= text_field_tag(:printerAddress, session[:printerAddress], 
       :onchange => onPrintLabelClick, 
       :onclick => "$('printerRemote_true').checked = true")%> <br /> 
      <div style="text-align:right;"> 
       <%= button_to_function(_("Print Label"), onPrintLabelClick) %> 
      </div> 
      <%=_('Error?')%>: <%= errorMessage %> <br /> <br /> 
      </div> 

這裏是它被最初呈現在div:

<div id="Block_asinSummary" class="block"> 
... 
... 
    <td height="200px" width ="70%"> 
    <%= link_to asinInfo["title"], asinInfo["link"], :target => "_blank" %><br/><br/> 
    <% if !asinInfo["clothingSize"].nil? %> 
     <b><%= _('Size')%>:&nbsp</b> <%= asinInfo["clothingSize"]%><br> 
    <% end %> 
    <font size='1'> 
     <% sku = collectedItemData.displaySku %> 
     <% if sku != collectedItemData.asin%> 
      <b>SKU:</b> <%= sku %><br> 
     <% else %> 
      <b>ASIN:</b> <%= collectedItemData.asin %> 
     <% end %> 

     <%= render(:partial => 'printLabel', :locals => { :creturnWipItemId => creturnWipItemId, :collectedItemData => collectedItemData, :asinInfo => asinInfo, :errorMessage => "HI" })%> 
    </font>   
    </td> 
    </tr> 
</table> 
... 
... 
<% end %> 

這裏是控制器代碼,應該用一個新字符串點擊時更新「errorMessage」:

render(:partial => 'printLabel', :layout => false, :locals => { :creturnWipItemId => creturnWipItemId, :collectedItemData => @collectedItemData, :asinInfo => asinInfo, :errorMessage => "Bye" }) 

我沒有看到任何錯誤,但errorMessage字符串沒有從「HI」更新爲「再見」。

回答

0

您不能從您的控制器調用渲染部分。相反,呈現模板並使用實例變量向部分傳遞不同的錯誤消息。