2011-01-21 14 views
0

我有以下代碼是_form.html.erb代碼的一部分。基本上我有一個表單,其中我有一個observe_field函數,在更改時,它將設置字段的值而不刷新頁面。以下是我的html代碼:這裏更好的方式來做HTML更新,然後揭露rails3中的JavaScript

<script type="text/javascript"> 

    // When DOM loads, init the page. 
    $(function() { 
     // Executes a callback detecting changes with a frequency of 1 second 
     $("#id_element_placeholder").observe_field(1, function() {          
     $.ajax({ 
     type: "GET", 
     dataType: "json", 
     url: "/students/get/" + this.value, 
     success: function(data){ 
      $('#last_name').attr('value', data.student.last_name); 
      $('#building').attr('value', data.student.building); 
      $('#room').attr('value', data.student.room);             
     } 
     }); 
     }); 
    }); 

    </script> 

問題是我要揭露很多我的代碼在JavaScript。有沒有更好的方式來做到這一點,而無需在JavaScript中暴露代碼?

這裏是我的控制器看起來像:

def get 
    @student = Student.find(params[:id]) 
    respond_to do |format| 
     format.html 
     format.json { render :json => @student } 
    end 
end 

基本上我的形式獲得一個ID,並從那裏我一定要得到相應的對象,並更新頁面上的字段。

回答

0

假設您的設計需要您通過id調用AJAX調用來查詢學生信息,那麼您需要公開該調用的URL。如果您不想公開JSON數據結構,則可以返回一大塊HTML(而不是JSON),並替換上面提到的所有控件的容器內容。

+0

這將有助於什麼?通過電線發送html的唯一一件事就是你的界面更加緩慢。 –

+0

他說他想避免「在JavaScript中暴露代碼」。返回一個HTML片段將會這樣做。否則,他必須返回某種數據結構並在客戶端解析它。當然,這需要權衡 - 在這種情況下,更爲嚴格的界面以及線路上數據的微小增長。 – bluescrubbie

相關問題