- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个模型;收藏和图像
集合模型
class Collection < ActiveRecord::Base
has_many :images, dependent: :destroy
accepts_nested_attributes_for :images
end
图像模型
class Image < ActiveRecord::Base
belongs_to :collection
mount_uploader :file, ImageUploader
end
集合有_很多:图像
在我的 edit_collection View 中,我在 GridView 中将所有图像显示为缩略图。目前我没有任何方法将图像发送到另一个集合。由于我不想强制用户一次编辑一张图像,因此我认为这将是一个使用拖放功能来更改图像所属集合的好机会。
我想在我的 edit_collection 页面上,有图像缩略图网格,我会在侧面有一个集合列表。允许用户将图像缩略图拖到集合上以更改图像的collection_id值。
由于我仍然很菜鸟,所以我正在寻找一个解决以这种方式更改属性的教程,或者可能是一个 gem ,或者任何建议。到目前为止,我发现的所有 Material 似乎都集中在使用拖放来更改列表的层次结构。
有人有什么建议吗?
最佳答案
实现可拖动功能将需要某种类型的Javascript(我不知道有任何 gem 可以将其抽象出来),所以请确保您熟悉如何Javascript/Ajax is used in Rails第一的。
从广义上讲,这种事情最流行的解决方案可能是 jQuery draggable 的组合。和 droppable 。您可以使用 jquery-ui-rails
gem ( more instructions here ) 将它们添加到 Rails 应用程序中。您需要在 app/assets/application.js
文件中引用所需的模块:
//= require jquery
...
//= require jquery.ui.draggable
//= require jquery.ui.droppable
...
//= require_tree .
基本上,您需要在 Controller 上执行一个带有几个参数的操作(您想要将其移动到的图像 id
和 collection_id
是个好主意在本例中),找到该图像并根据这些参数更改其集合,然后呈现 Javascript 或 JSON 响应来告诉浏览器已进行(或未进行)更改 - 假设您想留在页面上。例如:
def change_collection
@image = Image.find(params[:id])
@image.collection_id = params[:collection_id]
if @image.save
render json: ..., status: ...
else
render json: ..., status: ...
end
end
这只是一个给您一个想法的示例,出于安全原因,您可能不想像这样直接分配参数。
您需要一条指向该操作的路线,例如:
resources :images do
patch 'change_collection', on: :member
end
然后你需要实现 Javascript 方面的事情。阅读API documentation可拖动和可放置以查看可用的方法/事件,并根据您的喜好进行调整。你可能会做这样的事情:
$( ".html_class_representing_your_images" ).draggable();
$( ".html_class_representing_your_collections" ).droppable({
drop: function() {
Ajax request to the route we just made goes here
}
});
您可以在其他地方找到有关如何使用 jQuery 发出 Ajax 请求的大量信息(包括如何使用成功/失败处理程序),但我只是让您知道,您需要找到一种方法来获取 ids
来自 DOM 元素,传统的方法是在 View 中为它们提供 data
属性(在我顶部链接的指南中提到)。
将来,如果您添加更多像这样的奇特功能,并且您的应用程序在前端开始变得足够复杂,以至于您无法组织 Javascript,那么您可能需要考虑像 Backbone.js 这样的前端框架,而不是如此依赖 DOM。
无论如何,我希望这至少足以让您开始。
关于javascript - Rails 拖放更改对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24544783/
我在这里有一个我想要做的事情的例子:http://jsbin.com/OwoYAlEQ/1/edit 这是我的 HTML: person one person two person three per
我想知道是否有人知道是否有一个预先制定的解决方案:我在 ASP.net 网站上有一个列表,我希望用户能够通过拖放对列表进行重新排序。此外,我希望有第二个列表,用户可以将第一个列表中的项目拖到其中。 到
我想知道是否有人知道是否有一个预先制定的解决方案:我在 ASP.net 网站上有一个列表,我希望用户能够通过拖放对列表进行重新排序。此外,我希望有第二个列表,用户可以将第一个列表中的项目拖到其中。 到
我在我的 Web 应用程序中使用 Ajax ControlToolkit 中的 ModalPopupExtender。我将其 Drag 属性设置为 true,但是当我拖动弹出面板并将其放到新位置时,它
所以,基于this answer ,我有一组可以拖放并卡入到位的 div。唯一的问题是,可拖动的 div 具有不同的高度,我需要它们始终捕捉到目标的底部,而不是顶部。 您可以在this JsFiddl
我一直在使用 Bea 的解决方案 here一段时间后发现它非常有帮助。现在我遇到的问题是,当我将项目拖放到另一个 ListView 控件中或拖放到另一个 ListView 控件中,并且我想在拖动“期间
我试图在使用 QTreeWidget.setItemWidget() 重新父级(拖放)后将小部件放入 QTreeWidgetItem 但是,如果编译以下代码,结果是 QTreeWidgetItem 内
这是场景,我使用的是prototype和scriptaculous,但我相信jquery也会有同样的问题。我在相对定位的 div 中有一个可拖动图像的列表。问题是我无法将图像拖出父 div...好吧.
我正在使用一个普通(Bootstrap)表,我想在其中包含可排序的行。我正在使用 Angular CDK (DragDropModule) 来实现排序/排序。但是,当拖动行时,它会扭曲宽度,因为 cd
我正在尝试在我的 UICollectionView 中实现拖放机制,这与在快捷方式应用程序中重新排序快捷方式的组件非常相似。 截至目前,行为是当您开始拖动时,会留下一个透明的单元格 View ,而另一
我有以下 Jquery UI 拖放 jsfiddle https://jsfiddle.net/zoojsfiddle/ud96jdcp/ 具有
我希望创建一个基于网络的“公告板”,可以这么说,用户可以在其中创建/删除/拖放“图钉”,而不允许重叠“图钉”。 这是一个图表,应该有助于说明我正在尝试创建的内容: 'pins' 可能已创建双击;他们会
我是一名优秀的程序员,十分优秀!