我试图阻止模板助手在不必要时重新运行。我做了一个简单的应用程序来说明这种行为:
我想说我想显示一些只包含标题和描述的项目。
<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 :创建一个新的子模板,包括说明不能解决问题。
答案 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
});
}