2012-01-17 3 views
1

У меня возникли проблемы с получением вызова UJS для обновления отображения страницы. Я хочу обновить значение div при изменении поля выбора (я googled по всему месту, но безрезультатно).Rails3 Обновление UJS не отображается

I Настройка функции изменения, как это (я использую Haml):

%script 
    $("#timesheet_worker_id").change(function() { 
    -# This works, so we know we're responding to the change event: 
    -# alert('Fired the change function'); 
    $.ajax({url: "/timesheet_show_worker_name", 
    async: false, 
    data: 'selected=' + this.value, 
    dataType: 'script'}) 
    }); 
    }); 

Мой контроллер имеет следующие:

def show_worker_name 
    calculated = 'Adam Bilbo' 
    render(:update) {|page| 
    ### The following works just fine! 
    #page << "alert('This is a test')" 
    ### This doesn't; DOM is updated but not displayed; test data for now 
    page << "$('#timesheet_worker_name').val('Adam Bilbo')" 
    } 
end 

Мое мнение имеет (я использую simple_form):

=f.association :worker, :collection => Worker.all(:order => 'worker_number'), :prompt => 'Select a worker', :label_method => :worker_number, :label => "Worker Number", :input_html => {:class => 'startField'} 
%p{:id => :timesheet_worker_name} 

Когда вызов ajax завершен, я проверяю DOM, и значение там; то есть, в консоли:

$('#timesheet_worker_id").val() 

показывает «Адам Бильбо», но значение не отображается на моей странице.

Я запускаю Rails 3.0.9 и gem jquery-rails 1.0.9; любая помощь в выяснении того, что я пропускаю, очень ценится! Благодарю.

RESOLVED - Решение @iWasRobbed ниже работает. Однако основной проблемой было использование val() вместо text() при обновлении '#timesheet_worker_name', и поэтому мой оригинальный подход также работает с этим изменением. реструктурировать

ответ

0

Давайте это немного ...

:javascript 
    $('#timesheet_worker_id').change(function() { 
    $.ajax({ 
     url: '/timesheet_show_worker_name', 
     data: { 'selected': $(this).value }, 
     success: function (json) { 
     $('#timesheet_worker_name').text(json.name); 
     }, 
     error: function (response) { 
     alert('Oops, we had an error.'); 
     } 
    }); 
    }); 

И ваше действие контроллера будет:

def show_worker_name 
    calculated = 'Adam Bilbo' 
    render :json => { :name => calculated }, :status => :ok 
end 
+0

К сожалению, такой же, как мой исходный код. Нет отображения на странице, но значение DOM установлено. – JESii

+0

Извините, я даже не смотрел, что такое '# timesheet_worker_name' ... вы не можете установить элемент' p' с параметром 'val()'. Вам нужно использовать: '$ ('# timesheet_worker_name'). Text (json.name);' вместо этого. Я обновил свой ответ. Еще раз извините! – iwasrobbed

+0

Это трюк; Благодаря @iWasRobbed! И это также означает, что мой оригинальный пример работает с тем же изменением от val() до text() ... Я его протестировал. – JESii