- 浏览: 112353 次
- 性别:
- 来自: 北京
-
最新评论
-
adidaskebi123:
不错,最近小弟正在接触部署方面的东西
capistrano 部署rails -
kfw5313:
呵呵 路过 我孔繁伟
e-texteditor 与cygwin 开发rails -
lgn21st:
这个用的是Prototype,有时切图时CPU占用率较高,比较 ...
ramgick 剪切用户头像 -
chinapkw:
难道我的权限还不够,不能上传附件,晕掉。。
你在网上找一下C ...
ramgick 剪切用户头像 -
qianjigui:
加问一句,那个view需要些什么代码?谢谢!
ramgick 剪切用户头像
xml 代码
- Drag and Drop and Sortable Elements
- 两种不同的drag-and-drop行为模式:在同一列中移动、在两列之间移动。两种不同的drag-and-drop行为模式:在同一列中移动、在两列之间移动。 无论是那一种,你必须能够指明三种型态的actors :无论是那一种,你必须能够指明三种型态的actors :
- 原本的容器。原本的容器。
- 目的地容器。目的地容器。 (当是在同一个容器中移动时,两个是相同的) (当是在同一个容器中移动时,两个是相同的)
- 能被移动的物件。能被移动的物件。
- 另外,你需要指明行为模式:另外,你需要指明行为模式:
- 当物件被拉时,要做什麽?当物件被拉时,要做什么?
- 当物件被放下时,要做什麽?当物件被放下时,要做什么?
- 当移动完成时,要传送什麽讯息给server ?当移动完成时,要传送什么讯息给server ?
- 我们利用一个待办事项的范例来说明在两个container之间的移动。我们利用一个待办事项的范例来说明在两个container之间的移动。
- 首先是view的部份:首先是view的部份:
- drag_demo.rhtml
- <h2>待办事项</h2> <h2>待办事项</h2>
- <div id='pending_todos'> <div id='pending_todos'>
- <%= render :partial=>'pending_todos' %> <%= render :partial=>'pending_todos' %>
- </div>
- <h2>已完成事项</h2> <h2>已完成事项</h2>
- <div id='completed_todos'> <div id='completed_todos'>
- <%= render :partial=>'completed_todos' %> <%= render :partial=>'completed_todos' %>
- </div>
- 在每一个<div>中我们都有指定id这个属性,这样我们才可以将行为与目标繫结在一起。在每一个<div>中我们都有指定id这个属性,这样我们才可以将行为与目标系结在一起。 而在<div>中都是一个partial 。而在<div>中都是一个partial 。 这些partial中的内容都是<ul>与<ul>的id 。这些partial中的内容都是<ul>与<ul>的id 。
- _p ending _ todos.rhtml
- <ul id='pending_todo_list'> <ul id='pending_todo_list'>
- <% @pending_todos.each do |item| %> <% @pending_todos.each do |item| %>
- <% domid = 'todo_#{item.id}' %> <% domid = 'todo_#{item.id}' %>
- <li class='pending_todo' id='<%=domid%>'><%= item.name %> </li> <li class='pending_todo' id='<%=domid%>'><%= item.name %> </li>
- <%= draggable_element(domid, :ghosting=>true, :revert=>true) %> <%= draggable_element(domid, :ghosting=>true, :revert=>true) %>
- <% end %> <% end %>
- </ul>
- 在上面的partial中建立了一个<ul>与数个<li> 。在上面的partial中建立了一个<ul>与数个<li> 。 每一个<li>都有一个独立的id ,与相同的class 。每一个<li>都有一个独立的id ,与相同的class 。 而每一个<li>也都有一个drag-and-drop helper : draggable_element 。而每一个<li>也都有一个drag-and-drop helper : draggable_element 。 这个helper需要这个可被拖曳的物件的id ,以及几个选项:这个helper需要这个可被拖曳的物件的id ,以及几个选项:
- :ghosting => true/false #当true ,表示物件在被拖曳时,呈现50%的不透明, # false表示100%的不透明。 :ghosting => true/false #当true ,表示物件在被拖曳时,呈现50%的不透明, # false表示100%的不透明。
- :revert => true/false #当true ,表示物件被移动后,会先移回原位,然后再消失。 :revert => true/false #当true ,表示物件被移动后,会先移回原位,然后再消失。
- # false ,表示物件会直接消失。 # false ,表示物件会直接消失。
- 我们会到主页,我们要标示两个容器,让物件可以被放置(drop) 。我们会到主页,我们要标示两个容器,让物件可以被放置(drop) 。 我们将使用drop_receiving_element helper 。我们将使用drop_receiving_element helper 。
- drag_demo.rhtml
- <%=drop_receiving_element('pending_todos'
- :accept => 'completed_todo' :accept => 'completed_todo'
- :complete => “$('spinner').hide();” :complete => “$('spinner').hide();”
- :before => “$('spinner').show();” :before => “$('spinner').show();”
- :hoverclass => “hover', :hoverclass => “hover',
- :with => “'todotodo=' + encodeURIComponent(element.id.split('_').last())”, :with => “'todo=' + encodeURIComponent(element.id.split('_').last())”,
- :url => {:action=>:todo_pending, :id=>@user})%> :url => {:action=>:todo_pending, :id=>@user})%>
- <%=drop_receiving_element('completed_todos'
- :accept => 'pending_todo' :accept => 'pending_todo'
- :complete => “$('spinner').hide();” :complete => “$('spinner').hide();”
- :before => “$('spinner').show();” :before => “$('spinner').show();”
- :hoverclass => “hover', :hoverclass => “hover',
- :with => “'todotodo=' + encodeURIComponent(element.id.split('_').last())”, :with => “'todo=' + encodeURIComponent(element.id.split('_').last())”,
- :url => {:action=>:todo_completed, :id=>@user})%> :url => {:action=>:todo_completed, :id=>@user})%>
- 这个helper定义一个目标DOM element来容纳物件,以及定义在d&d的event行为模式。这个helper定义一个目标DOM element来容纳物件,以及定义在d&d的event行为模式。 除了定义接受方的id外,还有下列的选项:除了定义接受方的id外,还有下列的选项:
- :accept=> string #可以被放入的物件的CSS class名称。 :accept=> string #可以被放入的物件的CSS class名称。
- :before=>snippet #在与server端沟通前,要执行的JS 。 :before=>snippet #在与server端沟通前,要执行的JS 。
- :complete=>snippet #在与server端沟通完成后,要执行的JS 。 :complete=>snippet #在与server端沟通完成后,要执行的JS 。
- :hoverclass=>string #当滑鼠到一个可被移动的物件上时(hover ),外观的CSS class定义。 :hoverclass=>string #当滑鼠到一个可被移动的物件上时(hover ),外观的CSS class定义。
- :with=>snippet #建立要传送给server的parameter的JS 。 :with=>snippet #建立要传送给server的parameter的JS 。
- :url=>url
- :update=>string #在完成XHR call后,要修改的DOM element 。 :update=>string #在完成XHR call后,要修改的DOM element 。
- 在我们的例子中,两个container中的物件可以互相移动,而Drag-and-Drop的目的就是让被容纳的物件可以可以重新分类。在我们的例子中,两个container中的物件可以互相移动,而Drag-and-Drop的目的就是让被容纳的物件可以可以重新分类。 所以我们希望XHR request是在物件放置到另一个container的时候才触发,而不是在原本的container中也会触发。所以我们希望XHR request是在物件放置到另一个container的时候才触发,而不是在原本的container中也会触发。 在draggable_element helper中我们指明revert属性,如果物件被移到其他不是可接受的container时,他会回到原位,而不会触发任何的XHR 。在draggable_element helper中我们指明revert属性,如果物件被移到其他不是可接受的container时,他会回到原位,而不会触发任何的XHR 。
- 我们利用draggable item的DOM id ,来撷取这个物件的database id 。我们利用draggable item的DOM id ,来撷取这个物件的database id 。 这个with属性拥有一段JS code ,我们会给这段JS code一个DOM element ,就是我们拖曳的那个物件,并统一给这个物件一个变数名称为element 。这个with属性拥有一段JS code ,我们会给这段JS code一个DOM element ,就是我们拖曳的那个物件,并统一给这个物件一个变数名称为element 。 在我们的例子中,可拖曳的物件我们定义他的DOM id是todo_database id ,所以当我们要传讯息给server时,我们就去掉todo_ ,只传database id 。在我们的例子中,可拖曳的物件我们定义他的DOM id是todo_database id ,所以当我们要传讯息给server时,我们就去掉todo_ ,只传database id 。
- 在主页中,我们也定义了一些CSS ,来定义container与被拖曳物件的外型。在主页中,我们也定义了一些CSS ,来定义container与被拖曳物件的外型。
- drag_demo.rhtml
- <style>
- .hover { .hover {
- background-color: #888888; background-color: #888888;
- }
- #pending_todos ul, li, #completed_todos ul li { #pending_todos ul, li, #completed_todos ul li {
- list-style: none; list-style: none;
- cursor: -moz-grab; cursor: -moz-grab;
- }
- #pending_todos, #completed_todos{ #pending_todos, #completed_todos{
- border: 1px solid gray; border: 1px solid gray;
- }
- </style>
- 当滑鼠在可被拖曳的物件上时,会套用hover class ,让物件被highlight 。当滑鼠在可被拖曳的物件上时,会套用hover class ,让物件被highlight 。 而第二个class是定义当滑鼠在container中的li element时(就是可被拖曳的元件啦),滑鼠指标会使用-moz-grab这个造型,就是手抓的造型。而第二个class是定义当滑鼠在container中的li element时(就是可被拖曳的元件啦),滑鼠指标会使用-moz-grab这个造型,就是手抓的造型。 最后一个class只是定义container的造型。最后一个class只是定义container的造型。
- 如果你想要建立一个可排序的列表,让你在一个container中,只是改变内部物件的排列顺序,并通知server他们的顺序。如果你想要建立一个可排序的列表,让你在一个container中,只是改变内部物件的排列顺序,并通知server他们的顺序。 要建立这样的功能,你只需要建立一个Html的list ,并且指明当顺序改变时,该如何做。要建立这样的功能,你只需要建立一个Html的list ,并且指明当顺序改变时,该如何做。 剩下的, Helper会帮你完成。剩下的, Helper会帮你完成。
- <ul id='priority_todos'> <ul id='priority_todos'>
- <% for todo in @todos %> <% for todo in @todos %>
- <li id='todo_<%= todo.id %>'> <%= todo.name %> </li> <li id='todo_<%= todo.id %>'> <%= todo.name %> </li>
- <% end %> <% end %>
- </ul>
- <%= sortable_element 'priority_todos'', url=>{:action => 'sort_todos'} %> <%= sortable_element 'priority_todos'', url=>{:action => 'sort_todos'} %>
- 这个sortable_element Helper可以使用所有的Prototype的选项。这个sortable_element Helper可以使用所有的Prototype的选项。
- Script.aculo.us提供一个JS方法,称为Sortable.serialize 。 Script.aculo.us提供一个JS方法,称为Sortable.serialize 。 他会取得一个list ,并传回一个JSON ,其中会有一个目前内容物件的顺序的id列表,回传给server 。他会取得一个list ,并传回一个JSON ,其中会有一个目前内容物件的顺序的id列表,回传给server 。 这个id不是DOM element的id喔,他会脱去第一个underscore('_') ,然后传回后面的字串。这个id不是DOM element的id喔,他会脱去第一个underscore('_') ,然后传回后面的字串。 在我们的例子中,就会传回database id 。在我们的例子中,就会传回database id 。 可是这样会有一个问题,如果我们的DOM id是priority_todo_id时,他就会回传todo_id ,如果要解决这个问题,你可以利用:format这个选项,自己撰写regular expression 。可是这样会有一个问题,如果我们的DOM id是priority_todo_id时,他就会回传todo_id ,如果要解决这个问题,你可以利用:format这个选项,自己撰写regular expression 。 此外,你还有一些选项可以选择:此外,你还有一些选项可以选择:
- :constraint => value #你可以选择拖曳的方向是水平(:horizontal)或垂直(:vertical) 。 :constraint => value #你可以选择拖曳的方向是水平(:horizontal)或垂直(:vertical) 。
- :overlap=>value #计算可拖曳物件在水平或垂直方向的重叠。 :overlap=>value #计算可拖曳物件在水平或垂直方向的重迭。
- :tag=> string #在container中的什麽element可以被排序(预设是li) 。 :tag=> string #在container中的什么element可以被排序(预设是li) 。
- :containment=>target #将每个或一组element当作container ,预设是原来的container 。 :containment=>target #将每个或一组element当作container ,预设是原来的container 。
- :only=>string #一个或一组CSS class名称,过滤可拖曳物件。 :only=>string #一个或一组CSS class名称,过滤可拖曳物件。
- :scroll=>boolean #当可拖曳的物件数量多时,在拖曳物件时,要不要出现scroll bar 。 :scroll=>boolean #当可拖曳的物件数量多时,在拖曳物件时,要不要出现scroll bar 。
- :tree=>boolean #是否要使用树状列表,这表示你可以建立多层次的列表,然后在不同层之间拖曳。 :tree=>boolean #是否要使用树状列表,这表示你可以建立多层次的列表,然后在不同层之间拖曳。
发表评论
-
ramgick 剪切用户头像
2008-06-27 16:27 1719以前在别的论坛,或网站。上传头像时。总是不是很好,有的直接缩略 ... -
railslogVisualizer and Ruby on Windows Mobile 5
2008-06-17 11:16 1168可视化的rails log分析工具,在网上找了一些都是很老的版 ... -
CommunityEngine plugin for ruby
2008-06-13 16:09 1451http://missingmethod.brunoborns ... -
typo rails 的开源 blog
2008-06-12 13:28 2139小巧精致。 https://rubyforge.org ... -
e-texteditor 与cygwin 开发rails
2008-06-03 17:31 3137用netbeans 开发rails 有一年时间了。受禁了折磨。 ... -
rails2.0 安装beast
2008-06-03 00:29 2278今天想安装一下beast看看.毕竟用rails 这么久了. 本 ... -
可拖拽,保存展开收起状态的个人主页
2008-01-12 11:57 2648<li id="my_list_b" ... -
安装rails2.0
2007-12-19 00:19 1935rails 2.0 终于发布了。呵 装上试一下新功能。gem ... -
cache_count
2007-11-21 14:31 1362ruby 代码 #thingsuser.rb ... -
rails 常用文件操作
2007-11-20 13:40 47require 'mockfs' ... -
ruby jmaki on netbeans
2007-11-09 12:15 1276jMaki是SUN支持的一个AJAX框架。这个 ... -
freeze gems
2007-11-07 12:02 1170rake rails:freeze:gems表示把当前Gems ... -
rss
2007-10-09 10:44 1427通过BAIDU的快照看到这个文章的,原文章地址已经打不开了,只 ... -
rails 生成rss
2007-09-26 17:07 2003原文:http://xerdoc.com/blog ... -
rake
2007-09-21 14:56 1369转自:http://blog.csdn.net/s ... -
db:migrate简明指南
2007-08-06 17:14 3472首先,确保你已经配置好了database.yml,假设我们要创 ... -
write a plugin for rails
2007-08-06 14:14 1562A few days back I posted my ver ... -
swfupload 上传文件,带进度条 ruby on rails 应用
2007-08-03 10:45 4856公司的相册想要做上传文件的方案。本来用file_column ... -
capistrano 部署rails
2007-07-18 18:04 11759转自石锅拌饭,察 ... -
rails实现验证码
2007-07-07 16:09 14521.在windows上安装Rmagic,如果你是通过gem ...
相关推荐
Sortable is a <s>minimalist</s> JavaScript library for reorderable drag-and-drop lists. Demo: http://rubaxa.github.io/Sortable/ ## Features * Supports touch devices and [modern]...
不需要jQuery。 压缩后只有 0.5KB! 基于 简单的API var s = Sortable({ els: '.sortable' // Selector... // Behavior of drag and drop ('insert' or 'swap') type: 'insert' }); // destroy s.destroy(); 演示
Creating a Drag-and-Drop Sortable List**:详细说明了如何利用拖拽功能创建一个可排序的列表。 - **6. Update Multiple Elements with One Ajax Request**:介绍了一个方法,用于通过单一的 AJAX 请求更新多个...
**Creating a Drag-and-Drop Sortable List**:创建拖拽排序列表,使得用户能够直观地通过拖拽元素来改变列表顺序。 6. **Update Multiple Elements with One Ajax Request**:使用一个Ajax请求更新多个元素,这种...
(71KB)<END><br>86,step0.zip A series of articles that resulted from experimenting with adding Drag and Drop features to my existing application. (16KB)<END><br>87,undo.zip Easily add Undo/Redo ...
Vue Slicksort :vulcan_salute: 这些文档仅适用于V1 对于V2(与Vue 3兼容),请访问 一组组件mixin,可将任何列表变成动画,易于触摸且可排序的列表。 基于[@clauderic]的 此处提供示例: 特征 ...