2015-05-18 54 views
2

我有一個名爲「Articles」的集合。每篇文章都有一個類別。我希望有一個全局變量是我的Articles集合中每個不同類別值的數組。流星如何定義類級別的方法?

我試圖做這樣說:

/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 

這是行不通的。當我從控制檯調用Articles.categories()時,結果爲「未定義」。

我在做什麼錯?

編輯:

我想這樣做,是因爲我希望我的文章分類,以提供無處不在的網站。由於Articles集不會在每個頁面上發佈,所以我可以生成一個數組服務器端並將其傳遞給客戶端。

但也許這不是個好主意......

回答

1

A Meteor.method will always return undefined on the client(除非模擬/存根存在,它被稱爲另一個父方法中),所以這是正常現象。

我不確定爲什麼你需要在這個特定的用例中使用Meteor.method,但是,你不能只是將你的方法代碼複製到你的類方法中嗎?

編輯:

來完成你想做的事,我建議改變模型的創建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