【发布时间】:2015-08-21 23:18:55
【问题描述】:
我正在寻找使用 MeteorJS 完成以下任务的最佳方法。
要求如下:带有项目的列表,以及带有所选项目的侧栏(列表的当前页面不是必需的)。
我需要向客户端发送两个相同的 Items 集合:
- 列表当前页面的项目
- 侧栏的一项
我应该与出版物/订阅者跳什么舞?
这对我来说如何正确地做到这一点并不明显。
目前,我为列表和选定项目添加了两个发布,在客户端订阅了这两个发布。结果,当我在客户端执行 Items.find() 来填充列表时,它返回给我列表页面项目 + 选定项目(“项目 5”出现在第一页上)。
It is OK when selected item should be on current page of the list ("Item 2"), but it is NOT OK when selected item should not be there and it's added to the current page anyway ("Item 5") .
【问题讨论】:
-
我也会使用两个 pub/sub。首先是列出您的项目。然后,您希望将所选项目的 id 存储在一个数组中,您可以使用
Session.get和Session.set来存储它。您的第二个 pub 将接收一个 arg,即该数组。并且会返回所有 ids 在该数组中的文档。 -
@KassymDorsel 是的,但是如果您有来自同一个集合的 pub,当您在客户端执行 Items.find() 时,您会收到来自两个 pub 的 merge 项目。 。 正确的?这就是我所面临的。列表包含不应该存在的项目。
-
如果我添加代码片段对理解我的问题有帮助吗?
-
是的,集合中的所有数据都将在客户端中合并。这就是使用不同的 subs 的地方。即使所有项目都在客户端 minimongo 中,订阅者控制发送到要显示的视图的内容。从技术上讲,您可以拥有一个支持两个潜艇的 pub。今晚我可能有时间把一个例子放在一起。看看这个帖子,可能会有所帮助:stackoverflow.com/questions/19826804/…
-
@KassymDorsel 那篇文章几乎解释了我迫切地想出的东西。即union文档,需要在客户端duplicate find()查询。我仍然无法获得的一项,(这就是 Michel 提出的)-相同的查询如何与基于跳过/限制的分页一起正常工作?当我切换到第二页并在客户端控制台中执行 Items.find().fetch() 时,我只从第二页获得了项目。现在,如果我在服务器上执行相同的 skip 操作,它只会隐藏第二页上的所有项目。客户端上的第一页和第二页中的项目也没有聚合......
标签: javascript meteor