2015-10-06 55 views
2

我的web应用程序允许其用户与物品交互。这些物品可以放入垃圾桶,因此可以从常规物品中取出。我有一个名为“垃圾桶”的专用子菜单,用户可以在其中回收或删除先前放入垃圾桶的物品。如何才能发布反应性布尔标志?

我想要有条件地显示垃圾箱菜单,只有当垃圾箱中有物品取决于用户权限。

但是,我不想在用户转到垃圾箱子菜单之前将垃圾箱中的项目发布出去。

我目前所做的是调用返回一个标志的方法(用户垃圾箱中是否有物品?)。但是这不是反应性的:如果另一个用户垃圾一个项目,只有在页面重新加载后才会出现子菜单。

如何发布反应性布尔标志?

我认为使用每个菜单/用户一个cursor.Observe()和一个项目通知创建(通过更新)上使用假冒出版集合publication.changed()的项目或删除(通过删除)(一个布尔值字段),但它似乎考虑到用于该任务的资源的过度消耗。

我还考虑过在项目状态更改时更新每个用户配置文件中的专用字段。在这里,对于一个简单的功能来说,这又是太多的操作:我需要评估涉及物品状态更改的每项操作的每个用户权限,并且每次用户权限更改时,都要重新评估其回收每件物品的权利。

不太耗费的替代方法是将我的方法调用包装在菜单template.Autorun()中。但是,这不是一个反应式的解决方案,因为它仅在重新呈现菜单时触发。

你面临同样的问题?你有没有可能的替代解决方案(性能方面)?

+0

我不确定什么是复杂性。为什么不使用无功变量。 请关注(链接)[https://atmospherejs.com/meteor/reactive-var] – gatolgaj

+0

反应变量以及反应词典是客户端功能。我的问题在于通知客户存在垃圾箱内的物品而不发送它们。这是在服务器上计算并根据用户权限在客户端上提供的内容。基本上,我正在寻找单个布尔变量的发布功能。 – Billybobbonnet

+0

如何使用'Meteor.wrapAsync'来调用流星方法,该方法返回垃圾收集中物品的数量。 方法将包含类似'return(trash.find({})。count()=== 0)' – gatolgaj

回答

0
  1. 创建一个新的集合,例如:TrashBinState含有您垃圾桶的(可能是共享的)状态
  2. 更新该文档的服务器端,每当一个项目是丢弃
  3. 发布一份文件
  4. 是否每个客户都订阅该出版物