2013-07-08 21 views
0

我試圖動態重做搜索,因爲用戶按字符將它們輸入到搜索字段中。我對編程相當陌生,因此我不知道我在做什麼。感謝您的幫助。我該如何重做關鍵功能搜索

用戶/索引視圖:

<%= form_tag users_path, :method => 'get', class:"input-append" do %> 

    <%= search_field_tag :search, params[:search], :class => "search-query2", id:"search_on_index", placeholder: "Search for people" %> 

    <script type="text/javascript"> 
     $('#search_on_index').keyup(function() { 
      var search = <%User.paginate(page: params[:page]).search('$(this).val();')%> 
      $('#listeners').replaceWith(search) 
     }); 
    </script> 
<% end %> 

<%= will_paginate %> 

<ul class="users" id="listeners"> 
    <%= render @users %> 
</ul> 

搜索的工作原理只是沒有動態。

+1

在您的服務器上運行的Rails應用程序(可能是某個位於雲中的計算機)採用'views/users/index.html。erb'模板,評估嵌入式Ruby,結果是一個HTML文檔(可能有一些JavaScript)發送到客戶端。客戶端(可能是您用戶的Web瀏覽器之一)接受該HTML文檔,呈現它並評估JavaScript。所以,例如,如果JS代碼說要修改HTML,您的瀏覽器將會這樣做並呈現結果。尤其是,你的Ruby代碼在你的... –

+0

... JavaScript函數將永遠不會像你期待的那樣工作。你試圖實現的功能比較先進一些,你可能需要首先確定一些其他的概念,比如客戶機 - 服務器模型,Rails視圖/控制器的工作方式以及它們的功能,JavaScript可以做什麼以及不可以做什麼在網頁上等。從那裏你想要得到一個關於AJAX的句柄,它是如何工作的,它做了什麼,以及使用它的不同方式。一旦你知道如何使用AJAX,實現你所問的功能將非常簡單。 –

回答

1

你在這裏弄錯了很多概念。列梅解釋你在這裏試圖做什麼。但是在我這樣做之前,我強烈建議你先獲得一本好的Rails書籍,然後嘗試使用這些書籍中的一些應用程序,然後再自行嘗試。每個人都從你的水平開始。 Theres沒有錯,你正在試圖做:)。

首先:當瀏覽器第一次加載頁面時,Ruby代碼只執行一次。你不能在JavaScript中使用ruby。當您發送HTML頁面作爲對來自瀏覽器端的請求的響應時,您可以根據需要使用Ruby來呈現JavaScript。所以你做的部分var search = <%User.paginate(page: params[:page]).search('$(this).val();')%>是不可能的。

您需要在開發之前就掌握這些概念。 :)所以得到一本好的鐵軌書。

好的。

其次:我假設您的搜索工作正常,除了您的關鍵要求。所以我猜你有你的控制器和模型的順序。所以讓我向你解釋AJAX。

請記住,當我說你只能執行ruby代碼或者換句話說,在頁面加載時只調用一次Rails控制器?這是真的,但在JavaScript世界中稱爲AJAX的神奇事物。這使您可以調用Rails應用程序並在不加載頁面的情況下獲得響應!這正是你想要的。您正試圖更新搜索結果。你不想重新加載整個頁面。您只想在用戶按下搜索字段上的鍵時更新結果。

使用AJAX,您可以向您的服務器發出請求並獲得響應。因此,在您的應用程序中,如果用戶按下輸入或提交,則請求將發送到搜索表單要提交的URL。你會傳遞什麼作爲參數到這個URL?是的,你猜對了!搜索字段值。

讓你的概念權從這裏開始後好了:http://railscasts.com/episodes/240-search-sort-paginate-with-ajax?view=comments

然後你就會知道該怎麼做。

祝你好運。

+0

感謝您的建議,我最終計劃閱讀一本rails書。我一直在學習,這對我來說更有趣,但顯然留下了根本性的差距。 – APJ

+1

這也是學習的好方法。但是您需要對服務器端代碼和客戶端代碼以及整個客戶端 - 服務器體系結構有一些基本的瞭解。所以首先要了解基礎知識。在嘗試之前瞭解你在做什麼。你可以是一個開發人員,只是通過複製代碼片段而不知道它是如何工作的,或者你可以花一些時間理解你想要構建的東西,併成爲一名出色的開發人員。沒有人是完美的。每個人都不瞭解所有事情..我們只需要繼續努力! –

0

變種的onChange =函數()
{
警報( '檢查變更...');
};
$(this).off('keyup')。on('keyup',onChange);
$(this).off('paste')。on('paste',onChange);
$(this).off('cut')。on('cut',onChange);
$(this).off('undo')。on('undo',onChange);
$(this).off('redo')。on('redo',onChange);