我喜歡這種方法,尤其是對於像Autocomplete這樣的情況,每次用戶進行擊鍵時都會有一個服務器端請求。我注意到它給我的服務器帶來了很大的壓力(因爲幾乎全天候都會在應用中使用自動完成功能)。所以我會用我的代碼中的一個例子來適應。這是爲了進入播放列表。
我在PlaylistEntriesController
一個動作叫playlist
其中JS迴應:
def playlist
@all_playlist_entries = PlaylistEntry.scoped # just a dump of all the playlist entries for autocomplete
end
在
playlist.js.erb
然後:
<% cache 'playlist_entries', :expires_in => '1.day' do %>
var titles = <%=raw @all_playlist_entries.map(&:title).uniq.to_json %>
var artists = <%=raw @all_playlist_entries.map(&:artist).uniq.to_json %>
var albums = <%=raw @all_playlist_entries.map(&:album).uniq.to_json %>
var autocomplete_options = { delay: 100, autoFocus: true, minLength: 3 };
<% end %>
然後我簡單地傳遞這些JavaScript的變量爲 「源」自動完成。它是快速的(測試了100,000個條目,數據庫響應時間大約是4秒,實際的自動完成仍然幾乎立即),甚至更好,它每天只需要一次數據庫調用,因爲它被緩存,而不是千兆。當然,不利的一面是,直到第二天才會有新的參賽作品,但在我看來這並不是什麼大問題。
所以這不完全如何實現它,但它會工作。您可以對LinkedIn API進行一次調用,並將結果作爲json對象存儲在javascript數組中(使用to_json
,如果需要,您可以在模型中覆蓋該對象)。然後有一個鏈接,說Show 10 more
,這將做一些jQuery的魔術,以顯示未來十(我不能做我的頭頂,但它將是一個問題,找出有多少顯示,無論是與JavaScript在每個DIV上將該數字作爲data-attribute
或id
進行變量或存儲,然後獲取數組中的下10個)。
磚頭,謝謝!會嘗試你的建議,並很快回來。 – absolutskyy