0

我想用拖放来做一个待办事项列表,例如https://github.com/meteor/meteor/tree/master/examples/unfinished/reorderable-list

问题是我不知道如何正确处理排名。我尝试了上面的示例,它可以正常工作,直到构建的等级不再改变

因此,我认为每次插入新任务或更改一项任务的排名时,最好重新排序我的待办事项列表。

首先在客户端尝试:

    var dropRank=1  
    Tasks.find({rank:{$gt:dropRank-1}},{fields:{_id:1}}).forEach(
        功能(任务){
            Tasks.update(task._id,{$inc:{rank:1}})
    })  
    Tasks.insert({rank:dropRank})

在大约 150 个任务之后,在 rank 1 处插入新任务并重新排序会变得很慢。

第二次尝试服务器(使用 Meteor.method 或 collection.hook):

    Tasks.update({rank:{$gt:dropRank-1}},{$inc:{rank:1}},{multi:true})

在约 150 个任务之后,我看到客户端上的排名缓慢更新。

如果我尝试使用本地集合,它会在 400 个任务后变慢。

所以问题是:有没有合适的方法来建立一个等级,这样我就可以插入一个任务并显示它而不更新其他等级?

4

2 回答 2

0

我放弃了寻找另一种更新排名和渲染所有内容的方法。

我将数据分成两部分:

  • #each静态部分:使用和reactive:false集合构建第一个视图

  • 反应部分:一个光标观察器,当不是用户自己做时,它将放置新任务、删除或移动 dom 中的任务。

我可以轻松地在 500-700 个其他任务之前插入新任务,我很满意。我尝试了 1000 个任务,但太多了。

于 2014-05-19T06:39:32.637 回答
0

你有没有测试过是什么让你慢了下来:数据库的更新或页面的重写?我对您的应用程序进行了简单的复制,发现当有 400 个 div 写入浏览器页面时,更新确实需要一些时间,但是当我将数据上下文的输出限制为 50 行时,感觉真的很爽。

对于我正在处理的另一个项目,我发现在更新数据库时我必须非常小心我对浏览器的要求。它进行了一些测试,对于那个项目,我发现 30 个 div 几乎是我一次想要更新的所有内容。

于 2014-05-14T18:17:59.350 回答