不知道這個問題是否仍然有效,因爲它已經有一段時間了。但沒有選擇答案。 我遇到了類似的問題,我想根據控制器屬性顯示錶單。一旦顯示錶單,我想運行一些JavaScript來綁定事件處理程序。
但是,由於在觸發didInsertElement
時元素未顯示,所以Javascript沒有正確綁定事件處理程序。
我的解決方案如下,
控制器&查看
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
}
});
而模板
<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>
視圖綁定的控制器的性能。一旦該屬性發生變化,isVisible
函數就會啓動並重新渲染視圖。導致didInsertElement
再次觸發並將JS代碼綁定到現在可用的DOM元素。
希望這會有所幫助。
你試過'willRerender'掛鉤了嗎? – 2012-03-01 10:01:17
willRerender不會爲這個 – 2012-08-22 01:33:02
工作,你可以分解另一個子視圖並強制它進入或離開頁面,他們可以得到它的didInsertElement ... – 2012-08-22 01:34:12