2017-02-13 28 views
0
// Works 
var counter = 0; 
    var myInterval = Meteor.setInterval(function(){ 
     counter++; 
     var time = moment().hour(0).minute(0).second(counter).format('HH:mm:ss'); 
     console.log(time); 
    }, 1000); 

// Inside Helper - Does Not Work 

Template.clockRunner.helpers({ 
    start: function() { 
    var counter = 0; 
    var time = moment().hour(0).minute(0).second(counter).format('HH:mm:ss'); 
    var myInterval = Meteor.setInterval(function(){ 
     counter++ 
    }, 1000); 
    return time; 
    }, 
}) 

最初のバージョンのコンソールは、時刻を1秒単位で記録します。 HelperのバージョンはDOMに "00:00:00"と表示されますが、ヘルパーで時刻をコンソールに記録すると、毎秒 "00:00:00"が記録されます。Meteor Helpers - DOM操作

私はヘルパーの反応的な性質を誤解しているのか、小さなミスがないのか分かりません。前もって感謝します!

答えて

1

ヘルパーは、Blazeテンプレートにデータを提供するためのものです。テンプレートから呼び出されない限り呼び出されません。

だけが助けを考えると、それは "何もしない"と言わなければなりません。テンプレートがレンダリングされると、反応的なデータが処理されるため、ヘルパーが予期しない方法で数回呼び出されることがあります。

あなたは、あなたのタイマーをonRendered()メソッドで開始させたいと思っています。テンプレートとして一度呼び出されたものが画面に表示されます。 (テンプレートがスクリーンから外されたときに呼び出される対応するメソッドがあるので、タイマーを停止することができます)。

タイマーを開始すると、反応変数にタイマーデータを書き込んだ後、そのタイマーデータのフォーマット済みバージョンを返すヘルパーを書き込むことができます。それは反応的なvarにあるので、それはあなたのヘルパーがタイマーがダンプするたびに再度呼び出されることを保証します。

最後の部分は、単にBlazeテンプレートがヘルパーを参照することを保証しています。