我有一個js.erb文件,通過控制器操作使用ajax調用。 js.erb文件呈現一個部分。部分內部是根據模型生成的數據屬性。我需要一種方法才能在局部呈現後運行代碼,因爲代碼正在使用data屬性中的信息。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