基于Meteorjs Timer的事件触发器

时间:2014-07-01 08:52:43

标签: javascript

我创建了一个应用程序,我生成了一个文件,并将其下载到客户端桌面。现在,我设法使用手动点击事件创建它。这是我的代码。

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 个答案:

答案 0 :(得分:1)

使用eventsrendered挂钩,而不是使用模板的created挂钩,而不是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而不是单个字符串。这样更快,更容易维护!