Meteor:有选择地向客户端公开应用程序范围内的集合元数据的首选方法? (即仪表板)
Meteor: Preferred method to selectively expose app-wide collection metadata to client? (i.e. for dashboard)
我想在我的 Meteor 应用程序中实现一个管理仪表板,显示用户数量、当前登录用户和来自其他集合的元数据(计数、绘图等)等数据。
由于我现有的出版物仅在客户端公开每个用户自己的 "stuff",而 users 出版物仅公开登录用户以确保安全,我想我需要一些新界面。
如果具有管理员权限的用户已登录,那么有条件地收集此数据并将其公开给客户端的最佳方式是什么?我在考虑一组方法来提供每个显示的参数,或者一个仪表板方法收集所有参数并将它们 returns 作为一个大的 JSON 对象......有没有更好的方法?
您提出的任何解决方案都可以;我认为这取决于每个人的性能特征,这可能需要您自己探索。
顺便说一下,如果你 return 这些在一个反应性整体 JSON 对象中,这取决于你如何构建它,你可能每次都必须重新 运行 整个计算有些事情发生了变化,这可能是低效的。将方法分开似乎会更好,因为您只会重新运行计算更改后的数据。
您可以查看 simple:reactive-method package or Discover Meteor pattern for using a Meteor method in a template helper 让这更容易一些。我建议的模式是这样的:
// lib JS
Meteor.methods({
userCount: function() {
var user = Meteor.user();
if (user && user.admin) {
return Meteor.users.find().count();
}
}
});
// Client JS
Template.dashboard.helpers({
userCount: function() {
return ReactiveMethod.call('userCount');
},
isAdmin: function() { return Meteor.user().admin; }
});
// HTML
<template name='dashboard'>
{{#if isAdmin}}
There are {{userCount}} users.
... <!-- any other stuff you want -->
{{/if}}
</template>
我想在我的 Meteor 应用程序中实现一个管理仪表板,显示用户数量、当前登录用户和来自其他集合的元数据(计数、绘图等)等数据。
由于我现有的出版物仅在客户端公开每个用户自己的 "stuff",而 users 出版物仅公开登录用户以确保安全,我想我需要一些新界面。
如果具有管理员权限的用户已登录,那么有条件地收集此数据并将其公开给客户端的最佳方式是什么?我在考虑一组方法来提供每个显示的参数,或者一个仪表板方法收集所有参数并将它们 returns 作为一个大的 JSON 对象......有没有更好的方法?
您提出的任何解决方案都可以;我认为这取决于每个人的性能特征,这可能需要您自己探索。
顺便说一下,如果你 return 这些在一个反应性整体 JSON 对象中,这取决于你如何构建它,你可能每次都必须重新 运行 整个计算有些事情发生了变化,这可能是低效的。将方法分开似乎会更好,因为您只会重新运行计算更改后的数据。
您可以查看 simple:reactive-method package or Discover Meteor pattern for using a Meteor method in a template helper 让这更容易一些。我建议的模式是这样的:
// lib JS
Meteor.methods({
userCount: function() {
var user = Meteor.user();
if (user && user.admin) {
return Meteor.users.find().count();
}
}
});
// Client JS
Template.dashboard.helpers({
userCount: function() {
return ReactiveMethod.call('userCount');
},
isAdmin: function() { return Meteor.user().admin; }
});
// HTML
<template name='dashboard'>
{{#if isAdmin}}
There are {{userCount}} users.
... <!-- any other stuff you want -->
{{/if}}
</template>