Eu queria obter algumas estatísticas sobre meu aplicativo e usei o facts
pacote (mais informações aqui ) que fornece um modelo para exibir alguns dados de sessão sobre seu aplicativo.
Como eu queria saber como o pacote obtém suas informações, descobri que você pode publicar informações que não estão no banco de dados. Isso pode ser muito útil se você deseja enviar algumas informações para exatamente um cliente.
parece que o this
objeto no subscription
has added
, changed
e removed
métodos que, quando chamados, atualizam a coleção do cliente.
Eu queria experimentar isso criando um aplicativo que envia a hora do servidor para o cliente. As etapas são pequenas o suficiente para listar aqui
mrt create app
mrt add moment
assim que o aplicativo for criado, atualize o arquivo app.js
if (Meteor.isClient) {
testCollection = new Meteor.Collection("testCollection");
Template.hello.created = function () {
this._stopHandle = Meteor.subscribe("test");
}
Template.hello.helpers(
{
greeting: function () {
return "Welcome to app."
},
time: function(){
return testCollection.findOne();
}
});
Template.hello.events(
{
'click input': function () {
// template data, if any, is available in 'this'
if (typeof console !== 'undefined')
console.log("You pressed the button");
}
});
}
if (Meteor.isServer) {
var subs = {};
Meteor.startup(function () {
});
Meteor.setInterval(function () {
_(subs).each(function(sub, userId){
sub.changed("testCollection", "server-time", {serverTime: moment().format("hh:mm:ss"), user: userId});
})
}, 1000);
Meteor.publish("test", function () {
if (this.userId){
subs[this.userId] = this;
this.added("testCollection", "server-time", {serverTime: moment().format("hh:mm:ss"), user: this.userId});
this.ready();
}
})
}
a fim de exibir os dados na atualização do HTML, app.html
<head>
<title>app</title>
</head>
<body>
{{> hello}}
</body>
<template name="hello">
{{> loginButtons}}
<h1>Hello World!</h1>
{{greeting}} at {{time.serverTime}} for {{time.user}}
<p>
<input type="button" value="Click"/>
</p>
</template>
e então apenas
mrt