正如标题所示,我的主要目标是在 ajax 调用之后呈现动态 scss(.erb) 文件。
资产/javascripts/header.js
// onChange of a checkbox, a database boolean field should be toggled via AJAX
$( document ).ready(function() {
$('input[class=collection_cb]').change(function() {
// get the id of the item
var collection_id = $(this).parent().attr("data-collection-id");
// show a loading animation
$("#coll-loading").removeClass("vhidden");
// AJAX call
$.ajax({
type : 'PUT',
url : "/collections/" + collection_id + "/toggle",
success : function() {
// removal of loading animation, a bit delayed, as it would be too fast otherwise
setTimeout(function() {
$("#coll_loading").addClass("vhidden");
}, 300);
},
});
});
});
控制器/collections_controller.rb
def toggle
# safety measure to check if the user changes his collection
if current_user.id == Collection.find(params[:id]).user_id
collection = Collection.find(params[:id])
# toggle the collection
collection.toggle! :auto_add_item
else
# redirect the user to error page, alert page
end
render :nothing => true
end
当我单独切换数据库对象时,一切都非常顺利。
现在我想添加一些额外的香料,并li's
根据用户当前选择的集合更改我 50+ 的 CSS。
我想要的 CSS看起来像这样,它检查 li 元素是否属于集合,如果属于,则给它们一个边框颜色。
ul#list > li[data-collections~='8'][data-collections~='2']
{
border-color: #ff2900;
}
我将此添加到我的控制器以生成[]-conditions
:
def toggle
# .
# .
# toggle function
# return the currently selected collection ids in the [data-collections]-format
@active_collections = ""
c_ids = current_user.collections.where(:auto_add_item => true).pluck('collections.id')
if c_ids.size != 0
c_ids.each { |id| @active_collections += "[data-collections~='#{id}']" }
end
# this is what gets retrieved
# @active_collections => [data-collections~='8'][data-collections~='2']
end
现在我需要一种方法将这些括号放入动态生成的 scss 文件中。
我尝试添加:
respond_to do |format|
format.css
end
到我的控制器,有文件views/collections/toggle.css.erb
ul#list<%= raw active_collections %> > li<%= raw active_collections %> {
border-color: #ff2900;
}
它没有用,另一种方法是从我的控制器渲染 css 文件,然后将其传递给Manuel Meurer所描述的视图
我弄乱了文件名吗?喜欢使用css
而不是scss
?您对我应该如何进行有任何想法吗?
谢谢你的帮助!
为什么选择动态 CSS?- 推理
我知道这通常应该通过 JavaScript 添加类来实现。我为什么需要动态 css 的原因是,当用户决定更改选定的集合时,他会非常专注。比如 3 秒内打 4 个电话,然后暂停 5 分钟,然后在 4 秒内打 5 个电话。li's
每次调用后,JavaScript 都需要很长时间才能遍历 50 多个。
更新
事实证明,JavaScript 在处理我的“长”列表方面非常快......感谢大家指出我的想法中的错误!