2015-04-27 5 views
5

Ho un percorso di ferro-router per l'aggiornamento dei dati di un progetto specifico:In che modo posso attivare Rendered per eseguire una seconda volta quando il percorso cambia ma il modello rimane invariato?

Router.route('/project/:key/update', { 
    ... 
}); 

Ogni volta che l'utente si sposta ad una "pagina del progetto di modifica" Voglio mettere a fuoco all'ingresso nome-progetto.

template.onRendered(function() { 
    this.$('form input[name="project_name"]').focus(); 
}); 

Questo funziona perfettamente quando si passa dalla Dashboard a una qualsiasi pagina di modifica del progetto. Tuttavia, navigando verso/da una pagina di progetto a un'altra la funzione onRendered non viene rieseguita e di conseguenza l'input non è focalizzato.

risposta

6

È possibile forzare onRendered a rivalutare dopo un cambio di contesto con l'aggiunta di un assegno di currentData all'interno di un autorun come questo:

Template.myTemplate.onRendered(function() { 
    var self = this; 
    this.autorun(function() { 
    // hack to force the autorun to reevaluate 
    Template.currentData(); 

    // insert onRendered code here 
    self.$('form input[name="project_name"]').focus(); 
    }); 
}); 

Per maggiori dettagli, vedere la fine del this issue.

+0

Grazie! Avevo letto la tua risposta a una domanda simile su SO, ma mi mancava la parte '' self'''. –