防止模板助手在不必要时重新运行的最佳方法是什么?

时间:2014-10-14 14:10:48

标签: meteor meteor-blaze

我试图阻止模板助手在不必要时重新运行。我做了一个简单的应用程序来说明这种行为:

我想说我想显示一些只包含标题和描述的项目。

<template name="Tests">

  {{#each items}}
    {{> TestsItems}}
  {{/each}}

</template>


<template name="TestsItems">

  <div class="title">{{title}}</div>
  <div class="description">{{description}}</div>

</template>

我已启用自动发布。

  Template.Tests.helpers({
    items: function () {
      return Items.find();
    }
  });

  Template.TestsItems.helpers({
    description: function () {
      // I'm using this helper to do some updates
      // on a jQuery plugin when the description field change.
      // see example 1: https://github.com/avital/meteor-ui-new-rendered-callback/

      console.log("The description is run");

      return this.description;
    }
  });

仅在标题字段上进行新更新时,您可以看到重新运行描述帮助程序。我想要实现的只是在描述字段有新值时重新运行此帮助程序,而不是每次在文档中更改字段时都会重新运行。

由于{{#constant}}和{{#isolate}}已弃用,如何在最新的Meteor版本中获得此行为?

注1 :创建一个新的子模板,包括说明不能解决问题。

1 个答案:

答案 0 :(得分:1)

我会避免模板助手的副作用。相反,我会使用自动运行:

Template.TestItems.rendered = function () {
  var _id = this.data._id;
  this.autorun(function () {
    // Select only the description field, so that we only
    // trigger a re-run if the description field changes
    var description = Items.findOne(_id, {fields: {description: 1}}).description;

    // update the JQuery plugin
  });
}