Używam Meteora i mam problem z ponownym renderowaniem moich treści, gdy tego nie chcę.Zawartość zawinięta w ponowne renderowanie currentUser po aktualizacji użytkownika
Mam moją główną treść owiniętą w currentUser
, jeśli stwierdzenie, które moim zdaniem jest dość standardowe.
{{#if currentUser}}
{{> content}}
{{/if}}
Problem z tym, że mój szablon treści jest ponownie renderowany podczas aktualizacji mojego obiektu użytkownika. Czy jest jakiś sposób obejścia tego? Nie odwołuję się do użytkowników w dowolnym miejscu szablonu treści.
Dziękujemy!
Oto aplikacja próbka powtórzyć mój problem:
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;
}
});
}
Aktualizacja: Powinienem wyjaśnić tym przykładzie mało. Po utworzeniu użytkownika kliknięcie przycisku Aktualizuj wartość użytkownika powoduje zwiększenie liczby renderów. Dzieje się tak dlatego, że jest on zawinięty w {{#if currentUser}}
. Jeśli ta opcja zostanie usunięta, zauważysz, że liczba renderów pozostaje na poziomie 1.
Musisz również dodać do projektu pakiety accounts-ui
i accounts-password
.
który pracował doskonale. Dziękuję Ci! – Irving
@MurWade z nowym silnikiem Blaze'a zainicjowanym przez Meteor 0.8.3 kilka miesięcy temu. Możesz teraz po prostu użyć '{{#if currentUser}} ... {{/ if}}' bez elementów wewnątrz renderowania ponownie – Akshat
Używanie {{pathFor route = 'dashboard'}} wewnątrz czeku powoduje, że renderuje się ponownie , jakiś pomysł, jak to wyłączyć? – digz6666