2012-01-30 23 views
6

Im tìm kiếm một jQuery plugin tốt có thể xử lý tìm nước một thành phố thuộc (vào loại với autocomplete)Rails/auto Jquery Autocomplete hoàn toàn plugin cho thành phố, đất nước

ví dụ:

Typing "New Yor" 

nên tự động hoàn thành để

New York, United States 

và có thể lưu các thành phố và đất nước như

:city 
:country 

Điều gì sẽ là cách hay để đạt được chức năng như vậy? Tôi có nghĩa là nhiều hơn về lưu trữ tất cả các quốc gia và thành phố trong cơ sở dữ liệu người dùng. Tôi biết https://github.com/jim/carmen nhưng điều đó đang được viết lại và tôi rất thích tự mình tìm ra điều này, với một chút trợ giúp.

Trả lời

8

Cũng có thể viết logic của riêng bạn cho điều này kể từ khi tôi không nghĩ rằng một plugin được sẽ trình bày bản thân:

tôi giả sử thành phố và đất nước có id. Nếu không, logic sẽ thực sự đơn giản hơn. Sử dụng tính năng tự động hoàn thành của jQueryUI để kích hoạt tính năng tự động hoàn thành cho phần tử của bạn. Thêm một phương pháp điều khiển, sẽ cung cấp cho thành phố và quốc gia của bạn nhãn (có thể là một phương pháp trên một đối tượng thành phố) cùng với id của bạn trở lại như json. Trong cuộc gọi lại "chọn" tự động hoàn tất, hãy đặt các trường ẩn trong biểu mẫu của bạn cho id thành phố và quốc gia. Phần cuối cùng này là tùy chọn vì tôi không biết cách bạn định lưu giữ dữ liệu này từ biểu mẫu.

Các ví dụ sau đây giả định rất nhiều về ứng dụng của bạn, nhưng phải đủ để giúp bạn bắt đầu:

ví dụ về kịch bản cho quan điểm:

$("#yourField").autocomplete({ 
     source: "/path_to_your_action", 
     minLength: 2, 
     select: function(event, ui) { 
     $(this).val(ui.item.label); 
     $(this).find("#country_id").val(ui.item.country_id); 
     $(this).find("#city_id").val(ui.item.city_id); 
     event.preventDefault; 
     } 
    }) 

điều khiển:

def your_action 
    term = params[:term] 
    cities = City.where("cities.name like ?", "%#{term}%") 
    .limit(25) 
    .all 
    render :json=>cities.collect{|c| {:label=>c.your_label_method, :city_id=>c.id, :country_id=>c.country_id}} 
end 

city.rb

def your_label_method 
    "#{self.name}, #{self.country.name)}" 
end 
+0

Có một cách tốt để đi đúng hướng với điều này, thx! – Rubytastic

0

Trong trường hợp của bạn, giải pháp tốt hơn cho tôi là sử dụng api bản đồ google để biết một lợi tức tốt. Ví dụ, bạn có thể sử dụng plugin htp: //github.com/sgruhier/jquery-addresspicker.

+0

Cảm ơn tôi nhìn vào điều này, để lại câu hỏi mở cho một số phản ứng nhiều hơn Điều này có thể làm việc với một số sửa đổi vấn đề duy nhất là bạn sau đó không có quyền kiểm soát các giá trị trả lại. Mỹ thay vì Hoa Kỳ. Tôi muốn một giải pháp địa phương với cơ sở dữ liệu quốc gia riêng. thx dù chỉ ra viên đá quý – Rubytastic

Các vấn đề liên quan