2

如何发布任意数据?这就是我想要完成的,给出以下模板:

<head>
  <title>Test</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
  <h1>{{greeting}} World!</h1>
</template>

我想greeting在设定的时间间隔内动态更新,使用Meteor.setInterval. 文档中的所有示例似乎都Collections差不多。

4

2 回答 2

3

您可以使用 Meteor Session 变量作为反应数据源,以便模板自动重新呈现 ( http://docs.meteor.com/#session_set )。尝试这个:-

if (Meteor.is_client) {

  // Use 'greeting' Session variable as a reactive data source
  Session.set('greeting', 0);

  Template.hello.greeting = function () {
    return "Welcome to test: " + Session.get('greeting');
  };

  Meteor.setInterval(function() {
    Session.set('greeting', Session.get('greeting') + 1);
  }, 1000);
}

if (Meteor.is_server) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

更新:显示挂钩到streams包中。示例有效,但使用后果自负

if (Meteor.is_client) {
  // Use client from stream package
  sc = new Meteor._Stream('/sockjs');
  sc.on('message', function(payload) {
    var msg = JSON.parse(payload);

    // Set session variable so template reacts
    Session.set('greeting', JSON.stringify(msg.data));
  });

  // Use 'greeting' Session variable as a reactive data source
  Template.hello.greeting = function () {
    return Session.get('greeting');
  };
}

if (Meteor.is_server) {
  // Use server from stream package
  ss = new Meteor._StreamServer();

  // register handler for socket connection
  ss.register(function (socket) {
    var data = {socket: socket.id, connected: new Date()}
    var msg = {msg: 'data', data: data};

    // Send message to all sockets
    _.each(ss.all_sockets(), function(socket) {
      socket.send(JSON.stringify(msg));
    })
  });
}
于 2012-08-30T03:33:21.100 回答
1

您好,请查看这个新的Streams 包。您可以简单地将它用于您的用例

sc = new Meteor.Stream('hello');

if(Meteor.isServer) {
  Meteor.setInterval(function() {
    sc.emit('a_random_message', 'Random Message: ' + Random.id());
  }, 2000);

  Meteor.permissions.read(function() { return true });
}

if(Meteor.isClient) {
  sc.on('a_random_message', function(message) {
    Session.set('a_random_message', message);
  });

  Template.hello.greeting = function () {
    return Session.get('a_random_message');   
  };
}
于 2013-07-01T14:04:38.027 回答