Метеор: предпочтительный метод для выборочного предоставления клиенту метаданных коллекции всего приложения? (например, для приборной панели)

Я хотел бы реализовать панель администратора в своем приложении Meteor, отображающую такие данные, как количество пользователей, вошедших в систему в настоящее время пользователей и метаданные (количество, графики и т. д.) из других коллекций.

Поскольку мои существующие публикации раскрывают только собственные «вещи» каждого пользователя на стороне клиента, а публикация users раскрывает только вошедшего в систему пользователя в целях безопасности, я полагаю, что мне понадобятся некоторые новые интерфейсы.

Каков наилучший способ сбора и условного предоставления этих данных клиенту, если в систему вошел пользователь с правами администратора? Я думаю либо о группе методов для предоставления каждого отображаемого параметра, либо о методе панели инструментов, который собирает все параметры и возвращает их в виде большого объекта JSON... Есть ли предпочтительный способ?


person mtbkrdave    schedule 25.03.2015    source источник


Ответы (1)


Любое из предложенных вами решений будет работать; Я думаю, это зависит от характеристик производительности каждого, что, вероятно, вам нужно будет изучить самостоятельно.

На первый взгляд кажется, что если вы вернете их в реактивный монолитный объект JSON, в зависимости от того, как вы его структурируете, вам, возможно, придется перезапускать весь расчет каждый раз, когда что-то меняется, что, вероятно, будет неэффективным. Кажется, что разделение методов было бы лучше, поскольку вы будете повторно запускать вычисления только для измененных данных.

Вы можете проверить пакет simple:reactive-method или Узнайте о шаблоне Meteor для использования метода Meteor в помощнике шаблона, чтобы сделать это немного проще. Шаблон, который я бы предложил, будет примерно таким:

// 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>
person Carson Moore    schedule 25.03.2015