在Meteor中拖放可排序列表

Nic*_*ack 9 collaboration jquery-ui-sortable meteor

你会怎么做到的?

列表中的项目可以对应于集合中的记录,并且它们在列表中的位置可以对应于每个记录上的字段(可能是"等级"),当"停止"事件发生时,该字段必须被更新.

Meteor会与jQueryUI Sortable很好地配合吗?如果多个用户尝试一次拖动和排序相同的列表会发生什么?Meteor是否需要定制的排序行为?

Tom*_*man 6

编辑:以下答案已过时,@ cutemachine的答案或 http://blog.differential.com/sortable-lists-in-meteor-using-jquery-ui更接近现有技术水平.


简短的回答是:如果你想让它被反应,这并不容易.要创建一个非反应性版本,只需将模板包装在一个{{#constant}}标签中,然后将render@quoto建议的jquery-ui挂钩.

要制作一个被动版本,你的可排序小部件将不得不处理它下面发生变化的事情(考虑在数据重新排序时自动拖动).以下是关于如何实现它的一些想法:

  1. 不幸的是,制作动画并不容易,这会导致用户体验不佳.让我们暂时搁置一边.

  2. 使用以下内容呈现项目: {{#each items}} {{> item}} {{/item}}

    当数据从服务器下来时(无动画),这将重新排序.

  3. 将每个项目设置为在呈现时可拖动.你可以

    一世.使用像jquery-ui draggable这样的东西,并将其连接renderitem模板上.您可能在执行此操作时遇到问题,因为如果排序从上游更改,则在拖动期间底层元素可能会消失.

    II.实现您自己的拖动代码,可能使用较低级别的库.

  4. 当一个项目被拖动到位时,立即在本地重新排序列表(这样用户应该看到正确的东西.希望服务器会尊重变化..但是我们也不要进入那个).

我认为这种小部件非常需要,以流畅的方式完成.这是我个人的关注(但很多事情也是如此,包括用动画重新订购的好方法).

  • 祝这个@TomColeman好运,我认为考虑到有多少程序员可以从Meteor中免费获得,找到这样的场景的解决方案会很棒.我想也许在一个有限的范围内"暂停"反应的方法会非常酷.在"开始拖动"上,您可以暂停列表中的反应,将其锁定到其他客户端.在"Drop"上,您可以更新基础数据并恢复反应.您仍然可以跟踪拖动对象的位置并将其报告给其他客户端.他们被锁定,所以反应对他们来说是安全的.嘿,回头看这听起来有点疯狂. (2认同)

cut*_*ine 5

Meteor 的新渲染引擎 Blaze 现在可以更好地使用 jQuery。这是一个简短的视频,展示了如何使用 Meteor 和 jQuery-UI-sortable 实现一个可排序的列表。

代码可以在文件夹例如在GitHub上流星资料库中找到