2015-08-21 4 views
2

Я хочу передать переменную от серверной части к шаблону на стороне клиента. В 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(); 
     } 
    }); 
} 

Как я могу invoque функции makePrivateKey из стороны и печатей частных сервера ключ в моем шаблоне? Я не хочу использовать переменную сеанса или динамическую переменную.

+0

Почему вы не хотите использовать переменные сессии или ReactiveVars? – Curtis

+0

У меня, вероятно, будет много переменных для каждой страницы, и они со временем не изменятся, поэтому на странице html они будут постоянными. – jfjobidon

ответ

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

В общем, используя «метод» Метеор будет путь:

if (Meteor.isClient) { 
    Template.hello.helpers({ 
    privateKey : function() { 
     return Meteor.call(makePrivateKey); 
    } 
    }); 
} 
Смежные вопросы