我想将一个变量从服务器端传递到客户端的模板。 在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并进行打印 我的模板中的私钥? 我不想使用会话变量或动态变量。
答案 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);
}
});
}