this.applyToMarkup(this.applyTo); >delete this.applyTo ; }else if(this.renderTo){ this.render(this.renderTo); delete this.renderTo; >보이는 applyTo 속성은 Component가 applyToMarkup 메소드를 호출하도록 하고, renderTo는 render 메소드를 호출하도록 하며, 둘 다 설정된 경우 applyTo만 유효합니다. 이는 extjs 문서에도 구체적으로 명시되어 있습니다.
var contentTarget = this.getContentTarget(); if (this.html){ contentTarget.update(Ext.DomHelper.markup(this.html)); this.html 삭제; } if (this.contentEl){ var ce = Ext.getDom(this.contentEl); Ext.fly(ce).removeClass(['x-hidden', 'x-hide-display']); contentTarget.appendChild(ce); } if (this.tpl) { if (!this.tpl.compile) { this.tpl = new Ext.XTemplate(this.tpl); } if (this.data) { this.tpl[this.tplWriteMode](contentTarget, this.data); 이 데이터를 삭제하세요. } } this.afterRender(this.container); if(this.hidden){ this.doHide(); } if(this.disabled){ this.disable(true); } if(this.stateful !== false){ this.initStateEvents(); } this.fireEvent('afterrender', this); } 이것을 반환하세요. }
render 方法看起来比较复杂,仔细阅读下其实也不是太难,主要就是为一个DOM节点设置class,可见성별, onRender 방법 중 하나를 사용하여 html代码. 에서 applyTo와 renderTo의 논리와 렌더링 中提到的el配置属性, 我查extjs의 文档发现这是一个读属性,虽然有방법覆盖它,不过一般不需要手动设置,下面是Panel的公共属性el的文档原文:
클래스의 onRender 메소드에 의해 생성된 요소이지만 <a href="http://www.extjs.com/output/Ext.Component.html#Ext.Component-autoEl"><font face="NSimsun" color="#0000ff">autoEl<code><a href="http://www.extjs.com/output/Ext.Component.html#Ext.Component-autoEl"><font face="NSimsun" color="#0000ff">autoEl</font></a> 구성