我已經根據優秀的Meteor Kitchen項目生成的代碼構建了一個小型流星應用。這段代碼工作並將集合呈現給頁面,但有一件事我很困惑。爲什麼在一個鐵路路由器控制器中調用collection.find
代碼的子集是在這裏:
router.js
this.route("articles", {path: "/articles", controller: "ArticlesController"});
ArticlesController
this.ArticlesController = RouteController.extend({
template: "Articles",
onBeforeAction: function() {
this.next();
},
action: function(){
if (this.isReady()) {
this.render();
} else {
this.render("loading");
}
},
isReady: function() {
var ready = true;
var subs = [ Meteor.subscribe('allArticles') ];
_.each(subs, function(sub) {
if(!sub.ready())
ready = false;
});
return ready;
},
data: function() {
return {
articles: Articles.find({})
};
}
});
服務器/酒吧/ articles.js
Meteor.publish('allArticles', function() {
return Articles.find({});
});
Meteor.publish('singleArticle', function(articleId) {
check(articleId, String);
return Articles.find({_id: articleId});
});
據我瞭解這段代碼是如何工作的,發生以下情況:
(1)收集通過allArticles和singleArticle發表訂閱
(2)ArticlesController訂閱allArticles
(3)數據函數在ArticlesController中提取數據(從訂閱?)到文章數組whi然後將h暴露給Blaze模板。
我困惑的地方: 爲什麼我們需要在數據函數中做一個Articles.find({})?我們在哪裏訪問全部文章數據...似乎我們將直接回到文章收藏,如果我們僅訂閱了全部文章,那麼這可能會怎樣?
多麼令人難以置信的答案。如果可以的話,我會投它兩次。這部分對我來說完全有意義「存儲在客戶迷你mongo集合中的文章。」 – ardochhigh
@ardochhigh謝謝! – JeremyK