Meteor:将变量从服务器传递到客户端

时间:2015-08-21 19:31:33

标签: javascript meteor

我想将一个变量从服务器端传递到客户端的模板。 在main.html中,我有这个模板:

<template name="hello">
  ...
  <p>{{privateKey}}</p>
</template>

在main.js中,我想要类似的东西:

if (Meteor.isClient) {
    Template.hello.helpers({
        privateKey : function () {
            return 'call to function makePrivateKey';
        }
    });
}

if (Meteor.isServer) {
    Meteor.methods({
        makePrivateKey: function() {
            var privKey = bitcoinjs.ECKey.makeRandom();
            return privKey.toWIF();
        }
    });
}

如何从服务器端调用函数makePrivateKey并进行打印 我的模板中的私钥? 我不想使用会话变量或动态变量。

2 个答案:

答案 0 :(得分:2)

对我来说似乎是一个奇怪的结构。你不会想要帮助者生成私钥,我不这么认为。每次该模板呈现时,它都会生成一个键并打印出来。但是你无论如何都不能像这样调用这个方法,因为在客户端上使用Meteor.call需要回调,所以这不是这样做的方法。但是,这可能有效:

if (Meteor.isClient) {
  Template.hello.events({
    'click .generate-key': function () {
      Meteor.call('makePrivateKey', function (error, result) {
        if (!error) {
          Session.set('credentials/privKey', result.privKey);
        }
        else {
          // handle error
        }
      })
    }
  });

  Template.hello.helpers({
    privateKey: function () {
      return Session.get('credentials/privKey');
    }
  });
}

if (Meteor.isServer) {
  Meteor.methods({
    makePrivateKey: function () {
     try {
       var privKey = bitcoinjs.ECKey.makeRandom();
       return {privKey: privKey.toWIF()};
     } catch (e) {
       throw Meteor.Error('some-error', 'Bad things happened.');
     }
    }
  });
}

答案 1 :(得分:1)

一般情况下使用Meteor&#39;方法&#39;将是要走的路:

if (Meteor.isClient) {
  Template.hello.helpers({
    privateKey : function () {
      return Meteor.call(makePrivateKey);
    }
  });
}