2017-08-16 21 views
10

tôi có một dự án đường ray 2.x cũ mà tôi đã chuyển đổi chủ yếu qua đường ray 5.Hacking RJS hành vi trong Rails 5

Một vấn đề được một số hành động của tôi sử dụng RJS, vì vậy nó trông giống như:

if request.xhr? 
    render :action => 'new_user' and return 
end 

các new_user.js.rjs trông giống như sau:

page.call "User.create", render(:partial => 'new_user'), {:userId => @user.id} 

nhìn vào phản ứng trong chrome tôi có thể nhìn thấy nó chỉ đang trở lại:

User.create('<tr><td>....</td></tr>', {"userId" : 123}); 

Tôi chỉ phải hỗ trợ cuộc gọi RJC kiểu trang. Mọi thứ sẽ là "hack" dễ dàng để làm việc này trong thanh ray 5?

Tôi không muốn sửa đổi tất cả mã javascript của mình, tôi chỉ cần về cơ bản có một khối javascript mà tôi chuyển mã JS vào các trang xem của tôi phải không?

+0

Vì vậy, bạn có nghĩa là bạn không thể sử dụng rjs trong đường ray 5? –

+0

@AkiraSuzuki Yeah Tôi tin rằng nó đã được lấy ra trong đường ray 3.x – Blankman

Trả lời

2

tôi đã kết thúc việc trả lại một phản ứng JSON để trang điểm của tôi như thế này:

some_partial_html = render_to_string(:partial => 'something') 

response = { 
    "html": some_partial_html, 
    "a" : 1 
}.to_json 
render json: response 

Và sau đó theo quan điểm của tôi, tôi đã sử dụng các giá trị phản hồi json làm đối số cho đối tượng javascript mà perf orms chức năng tôi cần.

2

Cố gắng làm cho một phản ứng như là một chuỗi:

if request.xhr? 
    render render_to_string partial: 'new_user', 
    locals: { userId: @user.id }, 
    layout: false 
end 

Hoặc cố gắng sử dụng bộ xử lý định dạng thay vì:

respond_to do |format| 
    format.rjs do 
    render render_to_string partial: 'new_user', 
     locals: { userId: @user.id }, 
     layout: false 
    end 
end