2009-04-07 35 views
13

Tôi đang sử dụng đường ray, nhưng làm tất cả Javascript của tôi không phô trương bằng cách sử dụng jQuery trong application.js.Tự động hoàn thành jQuery autocomplete trong Rails

Thật không may, điều này khiến việc tham chiếu URL trở nên khó khăn. Ví dụ: nếu tôi muốn cung cấp hành vi tự động điền trường, tôi phải mã hóa cứng URL tự động hoàn thành trong application.js vì đường ray url_for không khả dụng.

Có thể thực hiện application.js sử dụng erb không? Tôi đang nghĩ về điều này một cách sai lầm?

Trả lời

6

Bạn có thể thêm url vào một thuộc tính trên trường biểu mẫu hoặc biểu mẫu, nếu bạn không nhớ đánh dấu có thể không vượt qua trình xác thực và sau đó tìm nạp thuộc tính đó bằng jQuery.

Dường như Rails 3.0 có thể đi xuống tuyến đường này với những người giúp đỡ javascript sử dụng HTML5 dữ liệu tùy chỉnh thuộc tính: DHH @ Railsconf 09

2

Có, có thể, trên các phiên bản đường ray hiện tại chỉ cần gọi tới tệp của bạn application.js.erb; trên các phiên bản cũ hơn, bạn có thể cuộn của riêng bạn hoặc lấy một cái gì đó như this.

+0

Cool! Đây có phải là phương pháp hay nhất ở đây không? Bạn có sử dụng phương pháp này không? Nghe có vẻ tốt với tôi, nhưng tôi vẫn lo lắng tôi đang làm việc chống lại hạt. –

+1

AFAIK, nó làm cho nó thành đường ray bởi vì rất nhiều người đã làm nó một mình. Đó là một mẫu sử dụng rất phổ biến. Một báo trước: đây là để tiêm những thứ bán tĩnh như các tuyến đường; nếu nội dung sẽ thay đổi trong một phiên, hãy gửi javascript trong trình bao bọc ajax thay thế. – MarkusQ

+0

Thực ra điều này dường như không hoạt động - tôi có phải di chuyển tệp ra khỏi/public/javascripts không? Nếu tôi chỉ đổi tên tập tin tôi nhận được một lỗi định tuyến khi trình duyệt của tôi yêu cầu 'application.js'. –

2

Đừng làm application.js.erb, đó không phải là một thực hành tốt ngay cả khi bộ nhớ đệm được tham gia. Làm cho bạn điểm cuối tự động hoàn thành (url mà bạn đang nhận dữ liệu) giống như url hành động của biểu mẫu của bạn. Trong số application.js, bạn chỉ cần gắn thêm &ac=1 vào bộ điều khiển và làm cho bộ điều khiển của bạn hiểu nó.

1

Bạn không cần phải hardcode it-- chỉ cần tạo một hàm JS đơn có thêm các autocomplete người nghe, và chấp nhận các thông số cho autocomplete, và gọi đó là JS chức năng từ mẫu của bạn:

(đang đơn giản hóa cho rõ ràng)

application.js:

function add_autocomplete(id, url) { 
    $("#" + id).autocomplete(
     source: url 
    ); 
}; 

application_helper.rb:

def add_autocomplete(id, url) 
    render :text => "<script> add_autocomplete('#{id}', '#{url}');</script>" 
end 

ERb mẫu:

<input id="i_want_autocomplete" /> 
<%= add_autocomplete("i_want_autocomplete", items_js_path() %> 
Các vấn đề liên quan