Meteor:如何发布自定义JSON数据?

时间:2015-03-02 14:32:39

标签: meteor iron-router

编辑:我使用的解决方案是@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(); }
});

如何实现向客户端发送非活动数据?

2 个答案:

答案 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);
  }
});

More about Session