截至目前,我在\ server \ publications.js中有我的MongoDB“Selects”,例如:
Meteor.publish("jobLocations", function () {
return JobLocations.find();
});
...我订阅了\ client \ main.js中的那些,例如:
Meteor.startup(function() {
Meteor.subscribe("jobLocations");
. . .
...但我在\ both \ methods.js中有我的Inserts / Updates / Upserts / Deletes,如下所示:
Meteor.methods({
'insertJobLocation': function(username, jobLoc, placename, st8OrProvince, postalcode, xcoord, ycoord) {
JobLocations.insert({
jl_jobloc: jobLoc,
. . .
...我正在从\ client \ templates \ whatever.js中调用它们,如下所示:
'submit form': function(event, template) {
. . .
Meteor.call('insertJobLocation', jobloc, placename, st8OrProvince,
postalcode, xcoord, ycoord, function(err) {
. . .
这有效,但是错了[-headed]?
应该所有发布/订阅MongoDB代码(IOW,位于\ server \ publications.js和\ client \ main.js?
答案 0 :(得分:1)
根据我的阅读,经验法则是订阅您需要在客户端浏览器上显示的内容。
这将返回JobLocations
集合中的所有项目/字段,因此,如果此集合很大,您可能希望使用query
或field
参数限制您发布的内容:
在:
Meteor.publish("jobLocations", function () {
return JobLocations.find();
});
一旦获得大量数据(或想要隐藏敏感数据!):
Meteor.publish("jobLocations", function (jobLocParam) {
var selector = {
jobLoc: {$in: jobLocParam},
}
var options = {
sort: {placename: 1},
fields: {jobLoc: 1, placename: 1},
limit: 20
}
return JobLocations.find(selector, options);
});
所有这些字段都是可选的,但我想我会举几个例子。如果您想要返回所有内容,selector
可以只是{}
,您可以使用fields
参数(也是可选的)限制发布哪些字段。出版物也可以使用参数,因此如果您愿意,可以在创建模板时通过出版物传递jobLoc
或其中的数组。
希望这有帮助!