2012-11-14 7 views
5

Meteor re rendert eine Ansicht, wenn sich ein Dokument ändert.Meteor wird nicht neu angezeigt, wenn sich bestimmte Felder ändern

Template.story.data = function() { 
    var storyID = Session.get('storyID'); 
    var story = Stories.findOne({ 
    _id: storyID 
    }) 

    if (!story) 
    return; 

    return story; 
}; 

Hier ist eine Vorlage Helfer für die Story-Vorlage, eine Geschichte aus dem Stories-Dokument.

Wenn Felder wie story.title ändert ich möchte die Vorlage neu zu rendern. Aber wenn sich Felder wie story.viewingusers ändern, möchte ich die Vorlage nicht neu rendern. Wie auch immer, um das zu ermöglichen?

Das spezifische Problem, das die Frage ausgelöst hat, wurde gelöst, indem die Veröffentlichungsfunktion so eingestellt wurde, dass diese Felder nicht veröffentlicht wurden. Diese Lösung funktioniert jedoch nicht für jeden Anwendungsfall und es wird eine allgemeine Lösung benötigt.

+0

try Vorlage bewahren? – crapthings

+0

Es sind immer noch die richtigen Daten richtig? Gibt es einen Grund, warum die Vorlage nicht mehrfach gerendert werden soll (über die Optimierung hinaus?) –

+0

@TomColeman Die Daten sind korrekt, aber ich habe ein Interface-Element, das als Popover angezeigt wird. Jedes Mal, wenn das Element neu gerendert wird, wird das Popover zerstört. Das ist wirklich nervig. – Harry

Antwort

3

Was Sie suchen, ist die #constant Vorlage Helper.

Was ich in Ihrem Fall tun würde, ist das Popover-Markup in einen konstanten Block zu verpacken und dann den Inhalt in diesem Block manuell in der story.rendered-Funktion zu aktualisieren.

So etwas wie folgt aus:

story.html:

<template name="story"> 
    ... 
    {{#constant}} 
     <!-- Popover markup here --> 
    {{/constant}} 
    ... 
</template> 

Client.js:

Template.story.rendered = function(){ 
    //Update logic here 
} 
+0

Dies ist eine Option, aber es ruiniert die Meteor-Stil-Logik und fügt eine Menge Komplexität hinzu, so dass ich auf etwas hoffe, das das Problem direkter anspricht. – Harry

+0

Hmm, ich bin mir nicht sicher über die Logik des Meteorstils, aber ich habe diese Technik aus dem Beispiel der "Partys" im Meteor gelernt. Sie sollten dieses Beispiel durchsehen, es wird ein Autorun um die Logik gelegt, so dass die Update-Logik auch 'im Meteor-Stil' ungültig wird. –

+0

Nun, das zwingt Sie dazu, 'Meteor.render' zu verwenden oder Ihr HTML mit Dom-Manipulation zu erstellen. Keine von beiden ist großartig. Ich habe das Beispiel der Parteien überprüft und das tun sie. Das funktioniert. aber es macht das Rendering langsamer, setzt Templating-Code in das Javascript statt der Vorlagen und zwingt Sie, Ihre Templates in mehrere Teile aufzuteilen. Alle drei Dinge erhöhen die Komplexität und machen die Wartung schwierig. Aber ich meine in Bezug auf SO ist dies eine ausgezeichnete und hilfreiche Antwort, danke. – Harry

Verwandte Themen