如何正确停止Meteor Tracker.autorun?

时间:2014-10-12 09:25:17

标签: javascript meteor

我有以下内容:

Meteor.startup(function() {
  var computation = Tracker.autorun(function() {
    var currentChapter;
    currentChapter = Chapters.findOne({
      _id: currentChapterId
    });
    if (currentChapter) {
      if (currentChapter.title) {
        $("#input-title").val(currentChapter.title);
      } else {
        $("#input-title").val("");
      }
      if (currentChapter.content) {
        $("#input-content").html(currentChapter.content);
      } else {
        $("#input-content").html("");
      }
    }
    return computation.stop();
  });
});

现在我得到:

  

Tracker afterFlush函数的异常:无法调用方法'stop'   未定义的TypeError:无法调用未定义的方法'stop'

我想要做的是在currentChapter为真时停止计算。我做错了什么?

1 个答案:

答案 0 :(得分:4)

两件事:

1 - 您的自动运行功能获取传递给它的计算的句柄,因此您可以像这样停止它:

Meteor.startup(function() {
  var computation = Tracker.autorun(function(thisComp) {
    var currentChapter;
    currentChapter = Chapters.findOne({
      _id: currentChapterId
    });
    if (currentChapter) {
      if (currentChapter.title) {
        $("#input-title").val(currentChapter.title);
      } else {
        $("#input-title").val("");
      }
      if (currentChapter.content) {
        $("#input-content").html(currentChapter.content);
      } else {
        $("#input-content").html("");
      }
      thisComp.stop();
    }
  });
});

2 - 在您的代码中,计算将在第一次运行结束时停止 - 无论您应该在if (currentChapter)块内停止计算。