【发布时间】:2016-01-01 11:30:46
【问题描述】:
我基于优秀的Meteor Kitchen 项目生成的代码构建了一个小型流星应用程序。这段代码工作并将集合呈现到页面,但有一件事我很困惑。
代码子集在这里:
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({})
};
}
});
server/pubs/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 中的 data 函数将数据(来自订阅?)提取到 articles 数组,然后将其暴露给 Blaze 模板。
我感到困惑的地方: 为什么我们需要在数据函数中做一个Articles.find({})?我们在哪里访问 allArticles 数据...看来我们要直接返回 Articles 集合,如果我们只订阅 allArticles 怎么可能? ?
【问题讨论】:
标签: meteor iron-router