编辑:我使用的解决方案是@Kyll的解决方案。
假设我想要返回的服务器端对象是"复杂的"构建并需要来自不同集合的不同属性。
我首先尝试过:
/server/publications.js
Meteor.publish('myCustomDocument', function(){
// suppose here that I need to X.find() different collections
// and create a complex Array of JSON data (which contains different
// attributes from different Collections
return [
{appName: 'aName',
category: 'catName',
anotherField: 'something'},
(...)
];
});
它不起作用,因为它没有返回光标。我想要做的是创建一个由不同集合构建的文档(或文档数组) 我不需要观察该文件的变化。
我为它创建了一个集合:
/collections/myCollection.js
MyCollection = new Meteor.Collection('myCollection');
在客户端,使用 铁路由器 ,我尝试做的是:
/lib/router.js
this.route('myPage',{
path: '/myPage',
waitOn: function(){ return Meteor.subscribe('myCollection'); },
data: function(){ return MyCollection.find(); }
});
如何实现向客户端发送非活动数据?
答案 0 :(得分:6)
如果不经常更改数据,使用方法可能更有意义。发布/订阅模式在这里也是可能的,但您不需要返回游标或任何东西,而是需要使用出版物"齿轮"手动,像这样:
Meteor.publish("myCustomPublication", function () {
// here comes some custom logic
this.added("myCollection", someUniqueId, someCustomData);
this.ready(); // without this waitOn will not work
});
答案 1 :(得分:5)
Meteor Pubs/Subs用于反应数据。如果您不需要反应性但服务器为您计算并发回一些一次性数据,则需要method!
// Server code
Meteor.methods('getComplexData', function() {
var complexData = { /* make your complex data */ };
return complexData;
});
// Client code
Meteor.call('getComplexData', function(err, data) {
if(err) {
// Handle error
}
else {
Session.set('complexData', data);
}
});