是否有一个后视图更改挂钩(很像didInsertElement)?
使用didInsertElement
钩子,我可以做一些需要的jQuery插件初始化。 但是,如果属性更改,Ember重新呈现视图,但不会再次调用didInsertElement
。 大概这是因为该元素已经在DOM上,并且只有某些片段已经改变。
我的问题是,是否有一种方法我可以重写,或者其他方式来访问通过Ember.View
后,其实际插入到DOM的东西已呈现到DOM的Ember.View
?
我试图使用afterRender
,但它不起作用。
我想出了解决这个问题的一个不寻常的方法。 当视图部分重新呈现时,您可以创建一个句柄助手来触发事件。 我正在使用Bootstrap和jqPlot,并且需要能够告诉,例如,当div可用于绘制图表时。 有了我的帮手,你可以做到这一点:
{{#if dataIsLoaded}}
{{trigger didRenderChartDiv}}
<div id="chartHost"></div>
{{/if}}
您也可以挂钩到childViews数组并观察其上的更改。
类似这样的工作,但我不认为这是一个很好的表现实践。
childViewsArrayDidChange: function() {
console.log("childViews-Array did change");
}.observes('childViews.@each')
不确定这个问题是否仍然有效,因为它已经有一段时间了。 但没有选择答案。 我遇到了类似的问题,我想根据控制器属性显示表单。 一旦显示表单,我想运行一些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元素。
希望这可以帮助。
链接地址: http://www.djcxy.com/p/58007.html上一篇: Is there an after view change hook (much like didInsertElement)?