我试过了:
posts = Posts.find({},
sort:
position: 1
).fetch()
for post in posts
i = 1
Posts.update post._id,
$set:
position: i
i++
但所有帖子最终都是第1位。我想要的是1,2,3,4等。
我做错了什么?
答案 0 :(得分:1)
您可以使用i
强制do
在合适的时间评估(而非引用)。来自fine manual:
当使用JavaScript循环生成函数时,插入闭包装以确保循环变量被关闭是很常见的,并且所有生成的函数都不会共享最终值。 CoffeeScript提供
do
关键字,它立即调用传递的函数,转发任何参数。
这正是您所面临的情况。您还可以使用for e, i in ...
形式for
让CoffeeScript处理循环计数器:
for post, i in posts
do (post, i) ->
Posts.update post._id,
$set:
position: i + 1
答案 1 :(得分:1)
你也可以这样做:
posts.forEach (post, i) ->
Posts.update post._id,
$set:
position: i + 1