2012-11-14 14 views
5

Meteor visualizza una vista quando un documento cambia.Meteor non esegue il rerender quando alcuni campi cambiano

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

    if (!story) 
    return; 

    return story; 
}; 

Ecco un modello di supporto per il modello di storia, ottenendo una storia dal documento Storie.

Quando i campi come story.title si modificano, desidero che il modello venga eseguito nuovamente. Ma quando i campi come story.viewingusers cambiano, non voglio rieseguire il template. Ad ogni modo per farlo accadere?

Il problema specifico che ha attivato la domanda è stato risolto impostando la funzione di pubblicazione su non pubblicare quei campi. Tuttavia quella soluzione non funziona per ogni caso e una soluzione generale è necessaria.

+0

prova preservare? – crapthings

+0

Sono ancora i dati corretti, giusto? C'è un motivo per cui non vuoi che il template venga visualizzato più volte (oltre l'ottimizzazione?) –

+0

@TomColeman I dati sono corretti, ma ho un elemento dell'interfaccia che appare come un popover. Ogni volta che l'elemento viene rerenderizzato, il popover viene distrutto. È davvero fastidioso. – Harry

risposta

3

Quello che stai cercando è l'helper del modello #constant.

Quello che farei nel tuo caso è racchiudere la marcatura popover in un blocco costante, quindi aggiornare manualmente il contenuto in quel blocco nella funzione story.rendered.

Quindi qualcosa di simile:

story.html:

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

Client.js: Modello

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

Questa è un'opzione, tuttavia rovina la logica dello stile meteorico e aggiunge molta complessità, quindi spero in qualcosa che affronta più direttamente il problema. – Harry

+0

Hmm non sono sicuro della logica dello stile meteorico, ma ho imparato questa tecnica dall'esempio delle parti in meteorite. Dovresti dare un'occhiata a quell'esempio, avvolge un autorun attorno alla logica in modo che la logica di aggiornamento sia invalidata "nello stile meteorico". –

+0

Bene questo ti obbliga a usare 'Meteor.render' o a costruire il tuo HTML con manipolazione dom. Nessuno dei due è fantastico. Ho controllato l'esempio delle parti e questo è quello che fanno. Questo funziona. ma rende il rendering più lento, inserisce il codice del template nel javascript al posto dei modelli e ti costringe a suddividere i tuoi modelli in più pezzi. Tutte e 3 le cose aggiungono complessità e rendono le cose difficili da mantenere. Ma intendo in termini di SO questa è una risposta eccellente e utile, grazie. – Harry

Problemi correlati