2015-05-18 2 views
2

У меня есть коллекция под названием «Статьи». Каждая статья имеет категорию. Я хотел бы иметь глобальную переменную, являющуюся массивом с каждым отдельным значением категории в моей коллекции статей.Метеор Как определить методы уровня класса?

Я пытался сделать это таким образом:

/models/article.coffee:

@Articles = новые Meteor.Collection "статьи"

Articles.categories = -> 
    Meteor.call "articleCategories", (e, r) -> 
    unless e 
     return r 

/server/article_server.coffee :

Meteor.methods 
    articleCategories: -> 
    categories = _.uniq(Articles.find({}, {sort: {category: 1}, fields: 
     {category: true}}).fetch().map (x) -> 
     x.category 
    , true) 
    return categories 

Это не работает. Результатом является «undefined», когда я вызываю «Статьи»() из консоли.

Что я делаю неправильно?

EDIT:

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

Поскольку коллекция статей не будет публиковаться на всех страницах, я бы мог просто создать серверный сервер массива и передать его клиенту.

Но может быть, это не очень хорошая идея ...

ответ

1

A Meteor.method will always return undefined on the client (если симуляция/заглушка не существует, и это называется внутри другого родительского метода), поэтому такое поведение, как ожидается.

Я не уверен, зачем вам нужен Meteor.method в этом конкретном случае использования, но не можете ли вы просто скопировать код метода в свой метод класса?

EDIT:

Чтобы сделать то, что вы хотите сделать, я хотел бы предложить изменения модели, чтобы создать Categories коллекцию, наполненную всевозможными категориями и просто публиковать все содержание к клиенту.

Затем просто используйте внешний ключ в своей коллекции Articles.

Дополнительным преимуществом будет то, что ваша клиентская сторона доступа к категориям будет реактивной, в отличие от использования Meteor.method.

Является ли это телескопом или даже Wordpress, я думаю, что эта схема очень популярна.

+0

Я предлагаю изменение модели схемы в мое последнее редактирование. – saimeunt

+0

Это правда, но это больше обслуживания. Я закончил создание помощников на уровне шаблонов (что мне все равно нужно делать). Они реактивны. Я надеялся, что есть другой способ опубликовать разные виды одной и той же коллекции с сервера. – ndemoreau

0

Взгляните на этот пакет:

https://github.com/dburles/meteor-collection-helpers

И добавить что-то вроде этого (я писал в JavaScript) в модели:

Articles.helpers({ 
    categories: function(){ 
     return _.uniq(
      _.pluck(Articles.find({}, {sort: {category: 1}, fields: 
       {category: true}}).fetch(), 'category'), 
      true 
     ); 
    } 
}); 
+0

Насколько я знаю, сборщики-помощники работают на уровне экземпляра, а не на уровне сбора.Так что это не работает для меня. Обратите внимание, что я редактировал вопрос, чтобы сделать мою цель более ясной. – ndemoreau

Смежные вопросы