Jquery 如何从Meteor多次渲染的模板中获取值?

Jquery 如何从Meteor多次渲染的模板中获取值?,jquery,templates,meteor,Jquery,Templates,Meteor,我想从一个多次呈现的模板中,在助手中获得不同的音频持续时间。除了在数据库中插入音频持续时间,还有其他方法吗?我试过很多东西,有些根本不推荐,但都不管用。那些给我看任何东西的,只给我看第一个音频的持续时间。这里有一个更丑陋的jerryrigs,它实际上返回一个数字,但它仍然很坏,并导致setInterval不停止 Meteor.myaudioplayer.helpers({ audioduration: function(){ //if using ReactiveVar...

我想从一个多次呈现的模板中,在助手中获得不同的音频持续时间。除了在数据库中插入音频持续时间,还有其他方法吗?我试过很多东西,有些根本不推荐,但都不管用。那些给我看任何东西的,只给我看第一个音频的持续时间。这里有一个更丑陋的jerryrigs,它实际上返回一个数字,但它仍然很坏,并导致setInterval不停止

Meteor.myaudioplayer.helpers({
   audioduration: function(){
     //if using ReactiveVar...
    audio = $("audio").get(0);
    instance = Template.instance();

        if (!instance.audioduration.get() || isNaN(parseInt(audio.duration))) {
              audioLenght = Meteor.setInterval(function() {
                    var totaltime = parseInt(audio.duration, 10);
                    var mins = Math.floor(audio.duration / 60, 10);
                    var secs = totaltime - mins * 60;
                    var gimmethetime = mins + ':' + (secs > 9 ? secs : '0' + secs);

                    instance.audioduration.set(gimmethetime);
                    return gimmethetime;

              }, 500);
        } 

        else {
            Meteor.clearInterval(audioLenght);
            return instance.audioduration.get();
        }
      }
});
这是我的HTML,如果它有帮助的话。
HTML

使用jQuery设置开始时的时间

Template.myaudioplayer.onRendered(
   function(){
        audio = $("audio").get(0);
        if (audio) {
             gimmethetime(audio);
        } 
      }
);
当用户点击play时

 ...
 playIt = Meteor.setInterval(function() {
    gimmethetime(thisaudio);
    ....
 }
 ...

我已经找到了我这个问题的答案。它可能不是最漂亮的东西,也不是我想要的东西,因为它不再使用助手,但它很有效。我不得不稍微修改一下HTML,所以现在,我有两组跨距,而不是计时器“.timeleft”跨距中的两个助手(一个用于进度,另一个用于持续时间)


/

当有人点击play时,您可以发布事件吗?您可以在那里使用jquery来更改持续时间吗?您是否尝试过使用反应变量或Tracker.dependency?很抱歉,延迟了,我仍在将所有内容从我拥有的内容(一个播放器应该是页面中唯一的一个)转换为我想要的内容(从一个模板呈现多个播放器),并且由于完成了一半,所有内容都开始出现问题。我必须先调试代码,这样我才能发布一些有用的东西,我将在下面这样做。为了回答您的其他问题,我从未使用jquery更改音频的持续时间,但我可以从中获得正确的音频持续时间。我不知道如何在助手上使用Tracker.dependency或reactive变量,除了我上面所做的方法在playIt设置间隔内,是否打印所需的结果?如果是这样,您可以使用jquery设置span duration元素的文本,或者更改通过helper返回值的被动helper的值。您可以解释如何处理onRendered吗?我假设您可以从
00:00
开始,否则发布onrendered的代码这是一个很好的部分答案,但我不能将其标记为解决方案,因为它有一些问题:
$(“音频”).get(0)
只返回正文中的第一个
标记;audio变量返回“NaN”,因为在运行第一个函数时模板尚未完成渲染;代码在onRendered()中,因此它永远不会再次运行,模板会被NaN卡住。最后,感谢您的时间和往返。我可能没有想出最漂亮的答案,但我的代码做了我现在需要它做的事情,这比我问的时候多得多。不客气。流星的反应性仍然是我想要掌握的东西。
Template.myaudioplayer.onRendered(
   function(){
        audio = $("audio").get(0);
        if (audio) {
             gimmethetime(audio);
        } 
      }
);
 ...
 playIt = Meteor.setInterval(function() {
    gimmethetime(thisaudio);
    ....
 }
 ...