2011-02-08 33 views
0

在我的应用程序中,用户可以按他们喜欢的任何顺序放入一个项目列表。数据库模式是这样的:如何高效地允许用户使用AJAX对列表进行排序

Items 
+ Id : int 
+ Name : string 
+ Order : int 

因此当用户把东西整理,这相应地设置Order场,这样我可以再整理。大。

现在,我想进行排序ajax-y,以便用户可以将项目拖放到顺序中(并使用向上/向下箭头),并且它将自动保存所有内容。 (如果你对Netflix很熟悉,他们也会做类似的事情。)

我遇到的问题是,为了在用户做出更改时坚持用户的更改,我需要每次都进行一次AJAX调用他们做一些事情。如果用户将一个项目从位置10移动到位置1,这意味着我必须在该小小的ajax调用中更新10条记录。同时,用户可能已经排队等待3个AJAX调用来更新其他记录。

这似乎效率低下,并且可能会出错(由于竞争条件等,如果AJAX调用需要很长时间)。我应该担心这个吗?有没有更有效的方法来做到这一点?如果它有所不同,我希望大多数用户将有少于5个项目进行排序。

回答

0

由于Javascript无法同步代码,我同意实现将确保避免竞争条件的代码将很困难,但我确实发现this article在Javascript中实现Mutex。

不过,我个人认为,与其选择一个选项,很可能会导致竞争条件,我会用下列选项之一去:

  • 创建一个保存以上项目按钮,当点击将把订单保存到数据库。
  • 创建一个计时器,如果事情发生了变化,该计时器将每5秒钟(或其他)保存订单。你仍然需要一个保存按钮,这样用户可以强制保存。

我会倾向于后者。很显然,在这两种情况下,您都会想要一些对用户有视觉提示的情况,例如更改未保存的更改(例如更改项目的背景颜色)。如果您使用这些选项中的任何一个(例如在Gmail中,当您在撰写电子邮件中未保存更改时),您最有可能希望实施某些功能,以确保用户想要保留未保存更改的页面。

相关问题