Nie jestem pewien, czy pytanie jest nadal aktualne, ponieważ minęło trochę czasu. ale nie wybrano żadnej odpowiedzi. Wystąpił podobny problem, gdy chcę wyświetlić formularz na podstawie właściwości kontrolera. Po wyświetleniu formularza chciałbym uruchomić niektóre javascript do wiązania procedur obsługi zdarzeń.
Jednak JavaScript nie związał poprawnie procedur obsługi zdarzeń, ponieważ elementy nie były wyświetlane po uruchomieniu didInsertElement
.
Moje rozwiązanie jest następujące,
Controller & Zobacz
App.FormController = Ember.Controller.extend({
myViewVisible : false,
actions : {
toggleForm : function(){
this.toggleProperty('myViewVisible');
console.log(this.get('myViewVisible'));
}
}
});
App.FormView = Ember.View.extend({
isVisible:function(){
this.rerender();
}.property('controller.myViewVisible'),
didInsertElement : function(){
// Do JS stuff
}
});
A szablon
<script type="text/x-handlebars" data-template-name="form">
<h2>Form</h2>
<button {{action 'toggleForm'}}>Toggle form</button>
{{#if myViewVisible}}
{{partial "tform"}}
{{else}}
<p>Click button to show form</p>
{{/if}}
</script>
Widok wiąże właściwość kontrolera. Po zmianie tej właściwości funkcja isVisible
kopie i ponownie wyświetla widok.Powoduje, że didInsertElement
ponownie strzela i wiąże kod JS z dostępnymi już elementami DOM.
Mam nadzieję, że to pomoże.
Czy próbowałeś haka 'willRerender'? –
willRerender nie będzie działał dla tego –
możesz rozłożyć inny widok podrzędny i zmusić go do wejścia lub wyjścia ze strony, możesz dostać do niego didInsertElement ... –