【问题标题】:Changing a subarray in document will not rerender with proper order更改文档中的子数组不会以正确的顺序重新呈现
【发布时间】:2014-12-19 12:41:17
【问题描述】:

我正在使用可排序的 jQuery UI 来更新存储在容器文档中的数组的顺序。当排序触发“停止”方法时,它会重建数组并根据新的 DOM 布局对其进行排序。一切正常,更新后的文档反映了正确的顺序。但是,dom 重新加载,并且顺序恢复到原来的状态。

当我物理刷新页面时,它实际上显示了正确的顺序。只是动态更改数组不会正确地重新渲染自身。

有趣的是,这个问题仅在 0.9.4 中出现,因此可能是流星的错误,只是不确定是否有更改会影响我想要完成的工作。

如果需要,我会提供代码示例,但由于代码本身似乎工作正常,并且每个代码都没有更新以反映顺序,我不确定它是否会有所帮助。

谢谢!

更新

我已经整理了一个独立的问题演示,在下面的评论中列出:

好的,这是一个疯狂的问题示例:

演示:app-9ryym2m2.meteorpad.com

来源:meteorpad.com/pad/uQ42DRH95JcHtKnb9

尝试对项目进行一些排序以查看问题的第 1 部分。接下来,在排序后,尝试点击切换按钮几次,尤其是在您排序的项目列表中。这是问题的第二部分。现在,如果您刷新页面,一切都会被赶上。笏。

双重更新

感谢 Github 的 aldeed,我有一个解决方案:https://github.com/meteor/meteor/issues/2944

通过将我的子文档引用键从“id”更改为“_id”,Blaze 似乎接受了对排序的更改!

【问题讨论】:

  • 根据更多探索,似乎 Meteor 仅在调用 update 前后列表大小不同时才进行完整的重新渲染。如果我只是重新排序数组并将其保存为新值,我会遇到问题。继续挖……
  • 探索继续。我没有修改数组的顺序,而是只更新数组中每个项目的排名值,并使用帮助程序手动进行排序。同样的问题,除了当我真正开始修改已经排序的文档时,它会打开一些其他有趣的错误。我将尝试制作一个可以分享的简化示例。
  • 好的,这是一个疯狂的问题示例:app-9ryym2m2.meteorpad.com meteorpad.com/pad/uQ42DRH95JcHtKnb9 尝试对项目进行一些排序以查看问题的第 1 部分。接下来,在排序后,尝试点击切换按钮几次,尤其是在您排序的项目列表中。这是问题的第二部分。现在,如果您刷新页面,一切都会被赶上。笏。
  • 上面的演示网址对我不起作用。
  • @rdickert 尝试使用流星垫链接。事实证明,如果我没有登录,meteorpad 会关闭服务器。或者类似的东西!

标签: jquery-ui meteor meteor-blaze


【解决方案1】:

我承认我没有深入研究您的代码,但它的更新方式表明您正在获取以前的状态而不是更新的状态。无论您拖动到哪里,最终状态都会反映您最后拖动到的位置(即使开始时它可能位于错误的位置)。也许是执行顺序/异步错误?

你看过 blaze 渲染引擎问世时 Avital Oliver(Meteor 核心开发人员)为 blaze 制作的拖放演示吗?您可以观看a video 并查看the repo。如果您尝试演示并在当前版本的 Meteor 上失败,您可以在那里提交问题并获得专业人士的支持 :)

【讨论】:

  • 谢谢@rdickert!略有不同,因为这些演示是在文档级别,而我的系统是从文档 ID 子数组到单独集合的复杂关系。如果你真的把演示弄乱了,你会看到它变得多么奇怪!
  • 是的,多玩一些,行为是复杂而令人困惑的!不过,我仍然认为像 Avi 这样的解决方案可能是可行的方法。它可能需要一些重组,但更容易推理正在发生的事情。您基本上是在模板中对您的集合执行合并(使用#with getPlayer)。最简单的解决方案是将您的数据非规范化并将玩家数据直接保存在 Teams 集合中,但如果您不想这样做,您可以合并您的助手(在迭代玩家之前),并且每个 should 正确管理排序。
  • 在切换功能上,我会避免将其存储在 dom 中,而是直接更新到集合(并让 blaze 通过模板切换任何 dom 元素)。我不确定这里发生了什么,但我的工作假设是由于with,blaze 缺少能够管理元素的上下文。但是,所有这些都不能直接解决您的问题。如果你认为这实际上是 blaze 中的 bug,你应该报告它,比我了解更多的人会看看!
  • 谢谢@rdickert!我会试一试,让你知道我想出了什么。
猜你喜欢
  • 2020-09-14
  • 2013-09-30
  • 2021-01-26
  • 2020-06-27
  • 2021-07-10
  • 1970-01-01
  • 2020-01-10
  • 2020-07-19
  • 2013-01-24
相关资源
最近更新 更多