最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Extjs學習筆記之五 一個小細節(jié)renderTo和applyTo的區(qū)別

 更新時間:2010年01月07日 21:15:45   作者:  
Extjs的組件有兩個看起來類似的配置項,applyTo和renderTo,這兩個配置項都是用來指定將該extjs組件加載到什么位置。那他們到底有什么區(qū)別呢,網(wǎng)上搜了下,有兩篇博文也是關于這個的。

ExtJS中的renderTo和applyTo的差別

對applyTo和renderTo的理解和思考

個人認為這兩篇文章寫的不夠通俗。寫一個簡單的例子來看看最終生成了什么代碼,

復制代碼 代碼如下:

<head>
<title>RenderTo and ApplyTo</title>
<link rel="Stylesheet" type="text/css" href="ext-3.1.0/resources/css/ext-all.css" />
<script type="text/javascript" src="ext-3.1.0/adapter/ext/ext-base-debug.js"></script>
<script type="text/javascript" src="ext-3.1.0/ext-all-debug.js"></script>
<script type="text/javascript" src="ext-3.1.0/src/locale/ext-lang-zh_CN.js"></script>
<script type="text/javascript">
Ext.onReady(function() {
var button = new Ext.Button({
renderTo: 'button',
text:'OK'
});

});
</script>
</head>
<body>
<div id="button">sadfa</div>
</body>
</html>

此代碼生成的html如下:
image 
如果是applyTo:button,則生成的代碼為:

image

很明顯,簡單的說,applyTo是將組件加在了指定元素之后,而renderTo則是加在指定元素之內(nèi)

接下來,我們再稍稍探尋下extjs源碼的奧秘。看看extjs內(nèi)部是如何使用這兩個配置項的,利用firebug插件調(diào)試一下ext-all-debug.js這個文件。

在Ext.Component的構造函數(shù)Ext.Component = function(config){…}中有這樣一段代碼(3.1.0版本是9270行):

復制代碼 代碼如下:

if(this.applyTo){
this.applyToMarkup(this.applyTo);
delete this.applyTo;
}else if(this.renderTo){
this.render(this.renderTo);
delete this.renderTo;
}

可見applyTo屬性使得Component調(diào)用applyToMarkup方法,而renderTo使得它調(diào)用render方法,并且如果兩個都設置的話僅有applyTo有效,這點在extjs的文檔中也有特別指出。

appylToMarkup方法如下(3.1.0版本是9560行),
復制代碼 代碼如下:

applyToMarkup : function(el){
this.allowDomMove = false;
this.el = Ext.get(el);
this.render(this.el.dom.parentNode);
}

它最終調(diào)用的也是render,不過render的位置是parentNode,render方法如下(3.1.0版本是9370行)
復制代碼 代碼如下:

render : function(container, position){
if(!this.rendered && this.fireEvent('beforerender', this) !== false){
if(!container && this.el){
this.el = Ext.get(this.el);
container = this.el.dom.parentNode;
this.allowDomMove = false;
}
this.container = Ext.get(container);
if(this.ctCls){
this.container.addClass(this.ctCls);
}
this.rendered = true;
if(position !== undefined){
if(Ext.isNumber(position)){
position = this.container.dom.childNodes[position];
}else{
position = Ext.getDom(position);
}
}
this.onRender(this.container, position || null);
if(this.autoShow){
this.el.removeClass(['x-hidden','x-hide-' + this.hideMode]);
}
if(this.cls){
this.el.addClass(this.cls);
delete this.cls;
}
if(this.style){
this.el.applyStyles(this.style);
delete this.style;
}
if(this.overCls){
this.el.addClassOnOver(this.overCls);
}
this.fireEvent('render', this);

var contentTarget = this.getContentTarget();
if (this.html){
contentTarget.update(Ext.DomHelper.markup(this.html));
delete 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);
delete 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);
}
return this;
}

render方法看起來比較復雜,仔細閱讀下其實也不是太難,主要就是為一個DOM節(jié)點設置class,可見性,在onRender方法中會對這個組件生成相應的html代碼。
對applyTo和renderTo的理解和思考 中提到的el配置屬性,我查extjs的文檔發(fā)現(xiàn)這是一個只讀屬性,雖然有方法覆蓋它,不過一般不需要手動設置,下面是Panel的公共屬性el的文檔原文:

el : Ext.Element

The Ext.Element which encapsulates this Component. Read-only.

This will usually be a <DIV> element created by the class's onRender method, but that may be overridden using the autoEl config.

Note: this element will not be available until this Component has been rendered.

所以我估計此文寫的是以前版本的extjs。個人認為,el是緊包裹著extjs組件的一個DOM節(jié)點,一般是由extjs自己生成的,好像細胞膜一樣,如果撥開了它,那么這個組件就不完整了,很可能會表現(xiàn)的不正常。而render方法中的container(也就是applyTo中指定元素的父元素,renderTo中指定的元素),是該組件的父元素,這個container中可以包括其他的html元素或者extjs組件。

綜上所述,其實applyTo和renderTo沒有很本質(zhì)區(qū)別,只是render的位置不同。

相關文章

  • ExtJS4中的requires使用方法示例介紹

    ExtJS4中的requires使用方法示例介紹

    ExtJS4的requires是新增的機制,主要是實現(xiàn)異步加載機制,在下面的文章總將為大家介紹下ExtJS4中的requires使用方法,需要的朋友不要錯過
    2013-12-12
  • extjs_02_grid顯示本地數(shù)據(jù)、顯示跨域數(shù)據(jù)

    extjs_02_grid顯示本地數(shù)據(jù)、顯示跨域數(shù)據(jù)

    這篇文章主要介紹了extjs_02_grid顯示本地數(shù)據(jù)、顯示跨域數(shù)據(jù)的具體實現(xiàn),需要的朋友可以參考下
    2014-06-06
  • extjs 學習筆記(一) 一些基礎知識

    extjs 學習筆記(一) 一些基礎知識

    相信很多人對使用js進行客戶端的編程比較頭大,其實現(xiàn)在已經(jīng)有了很多優(yōu)秀的js庫,可以大大簡化js編程的工作量,其中,jquery和extjs就是兩款非常優(yōu)秀的js庫。
    2009-10-10
  • EXTjs4.0的store的findRecord的BUG演示代碼

    EXTjs4.0的store的findRecord的BUG演示代碼

    EXTjs4.0 的store的findRecord的BUG:當判斷ID=1的時候,遇到1開頭的ID的時候,這個時候就判斷出問題了,有類似問題的朋友可以了解下哈
    2013-06-06
  • 解決Extjs上傳圖片無法預覽的解決方法

    解決Extjs上傳圖片無法預覽的解決方法

    網(wǎng)上找了好多EXTJS上傳圖片預覽的,但都不行,,,下面雖然IE8可以但肯定還存在其它瀏覽器的兼容性問題,待擱應付一下吧
    2012-03-03
  • ExtJs事件機制基本代碼模型和流程解析

    ExtJs事件機制基本代碼模型和流程解析

    最近開始自學ExtJs,下載了些視頻和上網(wǎng)搜了些相關文章和文檔準備好好學學,今晚第一次接觸ExtJs的事件機制,剛開始感覺有點暈,和以前所接觸的VB或是純的JAVASCRIPT的實現(xiàn)方式有些區(qū)別。根據(jù)一個例子,來分析和總結(jié)一下這個流程吧。
    2010-10-10
  • Extjs學習筆記之二 初識Extjs之Form

    Extjs學習筆記之二 初識Extjs之Form

    form恐怕是Web開發(fā)中最常用的控件了,Extjs對普通的html form進行了一些封裝,使其具有基本的外觀和一些簡便的和服務器進行通信的方法。
    2010-01-01
  • ExtJS 2.0實用簡明教程 之Ext類庫簡介

    ExtJS 2.0實用簡明教程 之Ext類庫簡介

    ExtJS由一系列的類庫組成,一旦頁面成功加載了ExtJS庫后,我們就可以在頁面中通過javascript調(diào)用ExtJS的類及控件來實現(xiàn)需要的功能。
    2009-04-04
  • ExtJS TabPanel beforeremove beforeclose使用說明

    ExtJS TabPanel beforeremove beforeclose使用說明

    ExtJS 關閉TabPanel內(nèi)的Panel時使用TabPanel的'beforeremove’和其內(nèi)的Panel的'beforeclose’事件彈出關閉確認提示對話框
    2010-03-03
  • ext前臺接收action傳過來的json數(shù)據(jù)示例

    ext前臺接收action傳過來的json數(shù)據(jù)示例

    這篇文章以示例的方式為大家介紹了ext前臺接收action傳過來的json數(shù)據(jù),需要的朋友可以參考下
    2014-06-06

最新評論

丽水市| 三穗县| 清水河县| 安陆市| 丹凤县| 府谷县| 子长县| 轮台县| 江川县| 新昌县| 沭阳县| 西林县| 泽州县| 澄迈县| 曲阜市| 双牌县| 噶尔县| 襄汾县| 光山县| 澄城县| 大名县| 新竹县| 榕江县| 建德市| 达州市| 南华县| 个旧市| 南宫市| 赣州市| 托克逊县| 房产| 濮阳市| 新野县| 治县。| 玉山县| 双柏县| 民勤县| 景洪市| 南通市| 黔江区| 泰和县|