2010-07-30 6 views
0

Я хочу, чтобы поле поиска начинало выводить результаты, как только пользователь начинает печатать.Наблюдаемое поле ничего не делает

Это мое мнение:

<%= observe_field 'keyword', 
     :url => { :action=> 'search_results' }, 
     :frequency => 0.5, 
     :update => 'results', 
     :loading => "$('.spinner').show()", 
     :complete => visual_effect(:slide_down, "results", :duration => 0.9), 
     :with => 'keyword' %> 


     <%= form_remote_tag :url =>{ :action => :search_results }, 
     :update => "results", 
     :loading => "$('.spinner').show()", 
     :complete => visual_effect(:slide_down, "results", :duration => 0.9) %> 



        <fieldset> 
         <legend>Tutor Search.</legend> 
         <label for="searchItField">Keyword Search.</label> 

         <%= text_field_tag(:keyword) %> 
         <span id="Submit_search"> 

         <span id="Submit_search_hover"><%= submit_tag "Search", :name => nil %></span> 

         </span> 
        </fieldset> 
     </form> 

<div id="results"> 
    <img class="spinner" id="ajax_spinner" src="../images/ajax-loader.gif" alt="Comment being processed" style="display: none" /> 
</div> 

В моем контроллере это:

def search_results 
     keyword = params[:keyword] 
     @tutors = Tutors.find(:all,:conditions => ["category LIKE ?", '%' + keyword + '%'])  
    end 

Теперь, если вы идете в http://avandata.net/tutor/tutors/search и введите математику в поле поиска и нажмите на кнопку отправить это работает. НО поле наблюдения ничего не делает при наборе текста. Я пытался понять это навсегда.

Вот как выглядит мой журнал разработки.

Here is my log/development Processing TutorsController#search (for 98.254.132.228 at 2010-07-30 09:29:52) [GET] Rendering tutors/search Completed in 5ms (View: 3, DB: 0) | 200 OK [avandata.net/tutor/tutors/search] 

А для кнопки отправки поиска она выглядит, как это в журнале:

Processing TutorsController#search_results (for 98.254.132.228 at 2010-07-30 13:28:22) [POST] 
    Parameters: {"authenticity_token"=>"KNsIfr69fDTVGEZnwQoyXhnnuK5ZP6QIwq/zHRVYWqQ=", "keyword"=>"math"} 
    [4;36;1mTutors Load (0.1ms)[0m [0;1mSELECT * FROM `tutors` WHERE (category LIKE '%math%') [0m 
Rendering tutors/search_results 
    [4;35;1mTutors Columns (3.4ms)[0m [0mSHOW FIELDS FROM `tutors`[0m 
Completed in 8ms (View: 2, DB: 4) | 200 OK [http://avandata.net/tutor/tutors/search_results] 

ответ

0

Я понял, что проблема в том, что поле наблюдения должно было идти после текстового поля. Это все. Смотри ниже.

<%= form_remote_tag :url =>{ :action => :search_results }, 
    :update => "results", 
    :loading => "$('.spinner').show()", 
    :complete => visual_effect(:slide_down, "results", :duration => 0.9) %> 



       <fieldset> 
        <legend>Tutor Search.</legend> 
        <label for="searchItField">Keyword Search.</label> 

        <%= text_field_tag(:keyword) %> 
        <span id="Submit_search"> 

        <span id="Submit_search_hover"><%= submit_tag "Search", :name => nil %></span> 

        </span> 
       </fieldset> 
    </form> 

    <%= observe_field 'keyword', 
     :url => { :action=> 'search_results' }, 
     :frequency => 0.5, 
     :update => 'results', 
     :loading => "$('.spinner').show()", 
     :complete => visual_effect(:slide_down, "results", :duration => 0.9), 
     :with => 'keyword' %> 
0

Если посмотреть на этой странице под Firebug вы увидите сообщение об ошибке Javascript происходит, как только вы наведите курсор мыши на текстовое поле. Вот почему он не работает для вас. Что касается того, что вызывает ошибку, неясно.

Я заметил, что библиотека JQuery, загружаемая страницей, довольно старая (1.2.6). Я бы рекомендовал обновить ваши поддерживающие библиотеки JQuery, по крайней мере, до версий, содержащихся в репозитории JQuery.

Если это не исправить вашу проблему, я бы предложил пересмотреть ваше использование JRails вообще. Я всегда думал, что это был просто бессмысленный проект - клонирование интерфейсов RJS, но построенный на JQuery вместо Prototype. Мое мнение, несмотря на это, похоже, не имеет большого интереса к сообществу, поэтому есть обеспокоенность в отношении будущей поддержки.

Если вам нравится RJS, просто используйте настройки по умолчанию, с которыми работает Rails. Они хорошо работают, если вам нравятся такие вещи. Если вам нравится JQuery, используйте его напрямую. Это отличная библиотека и очень интуитивно понятная. В то время, когда вы потратили на это, вы не могли бы закодировать эквивалентную функциональную версию в JQuery несколько раз.

+0

вы знаете, если есть простой способ вернуться к Protoype – Alex

+0

@Alex Я считаю, что вам просто нужно заменить JQuery и jrails Javascript включает с этим в макете (или страницы) '<% = javascript_include_tag : defaults%> ' – bjg