У меня есть файл js.erb, который вызывается с помощью ajax через действие контроллера. Файл js.erb делает частичным. Внутри частичного является атрибут данных, который создается на основе модели. Мне нужен способ запускать код только после того, как частичная обработка отображается, потому что код использует информацию в атрибуте данных.Rails 4 - событие для запуска кода после частичного рендеринга
items_controller.rb
def remove_tag
@item = Item.find_by_id(params[:id])
//code to remove tag from item
@item.save
respond_to do |format|
format.js
@item.reload
end
end
remove_tag.js.erb
$("#taglist").html('<%= escape_javascript(render partial: "items/tag_list", locals: {item: @item}) %>');
//the code below needs to be run after the above partial is rendered
$('#add-tag').rules("add", {
tagUniqueness: $('#taglist').data('tag-list').split(', ')
});
_tag_list.html.erb
<div id="taglist" data-tag-list="<%= item.all_tags_list %>">
//more html
</div>
Как теперь, метод .rules использует html-данные, которые были там до частичного обновления.
Ваши взгляды должны просто существующие модели. Если ваше представление изменяет модель, вы делаете что-то очень неправильное, так как плохо нарушаете MVC. – max
Мой взгляд не меняет модель, модель изменяется с помощью действия remove_tag. – user4584963
'tagUniqueness:" <% = @ item.tags.pluck (: name) .join (',')%> "' - похоже на гораздо более прямое решение, поскольку вы можете просто получить его из рельсов вместо DOM , – max