2015-05-18 2 views
0

Приложение My Rails содержит таблицу редактирования, подобную Excel, с использованием полей best_in_place. Они отлично работают при загрузке страницы, и у меня нет проблем с вызовом функций coffeescript на ajax:success после того, как пользователь отредактирует поле best_in_place.Rails Best_in_place ajax: успех не распознается

Поскольку это таблица в формате Excel, пользователи могут щелкнуть ссылку, чтобы добавить новую таблицу-заполнитель в таблицу. Мой файл create.js.erb добавляет строку без перезагрузки страницы. В новой строке есть несколько ячеек таблицы с функциональностью best_in_place, и их обновление обновляет базу данных, насколько это хорошо.

Проблема заключается в том, что, когда пользователь затем редактирует best_in_place поля в одном из новых строк, ajax:success не срабатывает, поэтому мое CoffeeScript функция не инициирует.

Я подтвердил, что новые ячейки таблицы имеют те же атрибуты класса и данных, что и существующие ячейки таблицы (ajax:success читается в имени класса).

Вопрос: в этом сценарии, как мне инициировать мою функцию coffeescript, если ajax:success не распознается?

Milestone контроллер, как создавать и обновлять действия

def create 
@payment_schedule = PaymentSchedule.find(params[:id]) 
build_default_milestone # this builds a placeholder milestone 
if @milestone.save 
    increment_milestone_positions # this relates to a sortable table 
    respond_to do |format| 
    format.js 
    format.html { redirect_to :back } 
    end 
else 
    respond_to do |format| 
    format.js 
    format.html { redirect_to :back } 
    end 
end 
end 

def update 
@milestone = Milestone.find(params[:id]) 

respond_to do |format| 
    if @milestone.update(milestone_params) 
    update_milestone_amounts 
    format.html { redirect_to(:back) } 
    format.json { respond_with_bip(@milestone) } 
    else 
    format.html { redirect_to(:back) } 
    format.json { respond_with_bip(:back) } 
    end 
end 
end 

Create.js.erb

$('#milestone-body').prepend('<%= escape_javascript(render partial: 'row_add', locals: { milestone: @milestone }) %>'); 

функция CoffeeScript

update-percent это имя класса б est_in_place. Эта функция отлично срабатывает для существующих строк, а не для новых.

$('.update-percent').on 'ajax:success', (event, data, status, xhr) -> 
    ... 

Любые предложения по тому, как это решить?

+0

«Редактируемая в Excel таблица» = электронная таблица – max

+0

Вы можете проверить jQuerys 'ajaxComplete()' fn и leter проверить на успех в нем. [Docs] (https://api.jquery.com/ajaxcomplete/) – Drops

ответ

1

Проблема разрешена. Проблема заключалась не в том, что ajax: успех не стрелял, это то, что (по неизвестным причинам) мне пришлось читать ajax: успех на уровне тела таблицы вместо рассматриваемой ячейки таблицы. По-видимому, это довольно распространенная проблема, когда при добавлении новых элементов в DOM после ее первоначальной загрузки вам нужно прочитать ajax: успех выше DOM.

Спасибо тем, кто предоставил вход.

0

Вы используете турбо-ссылки? Я думаю, что лучше всего на месте привязывается к готовому документу, который действует фанки, если вы используете турбо-ссылки. Если это так, удалите его из файла application.html.erb и application.js и повторите попытку.

+0

удалены турбонауки из Gemfile, application.html.erb и application.js ... к сожалению, до сих пор не распознаются 'ajax: success'. Вы правы, что привязываетесь к документу, готовому через '$ (document) .ready (function() { jQuery (". Best_in_place "). Best_in_place(); })', это в моем файле application.js. –