我正在使用 Meteor 并且遇到了一个问题,即我的内容在我不想要的时候被重新渲染。
我将我的主要内容包裹在一个currentUser
我认为相当标准的 if 语句中。
{{#if currentUser}}
{{> content}}
{{/if}}
这个问题是当我更新我的用户对象时我的内容模板被重新渲染。有没有办法解决?我不会在内容模板中的任何地方引用用户。
谢谢!
这是一个复制我的问题的示例应用程序:
HTML
<head>
<title>Render Test</title>
</head>
<body>
{{loginButtons}}
{{> userUpdate}}
{{#if currentUser}}
{{> content}}
{{/if}}
</body>
<template name="userUpdate">
<p>
<input id="updateUser" type="button" value="Update User Value" />
User last update: <span id="lastUpdated">{{lastUpdated}}</span>
</p>
</template>
<template name="content">
<p>Render count: <span id="renderCount"></span></p>
</template>
JavaScript
if (Meteor.isClient) {
Meteor.startup(function() {
Session.set("contentRenderedCount", 0);
});
Template.content.rendered = function() {
var renderCount = Session.get("contentRenderedCount") + 1;
Session.set("contentRenderedCount", renderCount);
document.getElementById("renderCount").innerText = renderCount;
};
Template.userUpdate.events = {
"click #updateUser": function() {
Meteor.users.update({_id: Meteor.userId()}, {$set: {lastActive: new Date()}});
}
};
Template.userUpdate.lastUpdated = function() {
return Meteor.user().lastActive;
};
}
if (Meteor.isServer) {
Meteor.users.allow({
'update': function () {
return true;
}
});
}
更新:
我应该稍微解释一下这个例子。创建用户后,单击“更新用户值”按钮会导致渲染计数增加。这是因为它被包裹在一个{{#if currentUser}}
. 如果将其删除,您会注意到渲染计数仍为 1。
此外,您需要将accounts-ui
和accounts-password
包添加到您的项目中。