2014-07-01 61 views
1

我做了一個應用程序,我生成一個文件,並將下載到客戶端桌面。現在,我設法使用手動點擊事件來創建這個。這是我的代碼。Meteorjs基於計時器的事件觸發器

Template.productionRun.events({ 
    'click .btGenFile': function(e,t){ 

     console.log('i\'m now click') 
     // bootbox.alert('Welcome back New Meteorite!'); 
     var strLoc = "C:/LabelPrint/labelPrint.lbl"; 
     var strQty = 1; 
     var str1 = "14N1234"; 
     var str2 = 50; 
     var str3 = "Made in Philippines"; 
     var str4 = "Cebu"; 


     var strPj = strLoc + "\r\n" + 
     strQty + "\r\n" + 
     str1 + "\r\n" + 
     str2 + "\r\n" + 
     str3 + "\r\n" + 
     str4; 
     var blob = new Blob([strPj], { 
      type: "text/plain;charset=utf-8;", 
     }); 
     saveAs(blob, "job.pj"); 
    } 
}); 

然而,文件生成的頻率將是至少1個文件/秒,所以我需要它自動下載該文件,而無需用戶。有沒有辦法使用計時器來觸發下載事件?

我看到了meteor-reactive-timer包但遺憾的是我不知道如何使用它我的代碼。

回答

1

而不是使用模板的events鉤,使用createdrendered掛鉤,與setInterval

Template.productionRun.rendered = function() { 
    // This code runs once the template has been rendered 
    console.log('Template has been rendered!'); 

    var interval = 1000; 

    setInterval(function() { 
     // This runs once every `interval` milliseconds 
     var strPj = [ 
      "C:/LabelPrint/labelPrint.lbl", 
      1, "14N1234", 50, 
      "Made in Philippines", 
      "Cebu" 
     ].join('\r\n'); 

     var blob = new Blob([strPj], { 
      type: "text/plain;charset=utf-8;", 
     }); 
     saveAs(blob, "job.pj"); 
    }, interval); 
}; 

請注意,我也用Array.join構建strPj,而不是單獨的字符串。這是更快,更容易維護!

+1

謝謝吉姆..我在尋找模板之前,你回答我的問題,並很高興我在正確的方向。最後,我用你的代碼解決了我的問題,很高興我也學習了Array.join函數。 – ralphie