??xml version="1.0" encoding="utf-8" standalone="yes"?>日夜干在线视频,天堂亚洲精品,一区二区三区在线不卡http://www.aygfsteel.com/liuyz2006/category/50542.htmlzh-cnFri, 08 Feb 2013 02:23:24 GMTFri, 08 Feb 2013 02:23:24 GMT60“正则表辑ּ(/[^0-9]/g,'')中的"/g"是什么意思??/title><link>http://www.aygfsteel.com/liuyz2006/articles/388367.html</link><dc:creator>阿?/dc:creator><author>阿?/author><pubDate>Sun, 23 Sep 2012 02:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/liuyz2006/articles/388367.html</guid><wfw:comment>http://www.aygfsteel.com/liuyz2006/comments/388367.html</wfw:comment><comments>http://www.aygfsteel.com/liuyz2006/articles/388367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/liuyz2006/comments/commentRss/388367.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/liuyz2006/services/trackbacks/388367.html</trackback:ping><description><![CDATA[<p>“正则表达?/[^0-9]/g,'')中的"/g"是什么意思?”<br /><br />也ؓ了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯p涂的地方再pȝȝ一下?</p> <p>ȝ1Q附件参数g的用?</p> <p>表达式加上参数g之后Q表明可以进行全局匚wQ注意这?#8220;可以”的含义。我们详l叙qͼ </p> <p>1Q对于表辑ּ对象的execҎQ不加入gQ则只返回第一个匹配,无论执行多少ơ均是如此,如果加入gQ则W一ơ执行也q回W一个匹配,再执行返回第二个匚wQ依ơ类推。例?<br />var regx=/user\d/; <br />var str=“user18dsdfuser2dsfsd”; <br />var rs=regx.exec(str);//此时rs的gؓ{user1} <br />var rs2=regx.exec(str);//此时rs的g然ؓ{user1} <br />如果regx=/user\d/gQ则rs的gؓ{user1}Qrs2的gؓ{user2} <br />通过q个例子说明Q对于execҎQ表辑ּ加入了gQƈ不是说执行execҎ可以返回所有的匚wQ而是说加入了g之后Q我可以通过某种方式得到所有的匚wQ这里的“方式”对于exec而言Q就是依ơ执行这个方法即可?</p> <p>2Q对于表辑ּ对象的testҎQ加入g于不加上g没有什么区别?</p> <p>3Q对于String对象的matchҎQ不加入gQ也只是q回W一个匹配,一直执行matchҎ也Lq回W一个匹配,加入gQ则一ơ返回所有的匚wQ注意这与表辑ּ对象的execҎ不同Q对于exec而言Q表辑ּ即加上了gQ也不会一ơ返回所有的匚wQ。例如: <br />var regx=/user\d/; <br />var str=“user1sdfsffuser2dfsdf”; <br />var rs=str.match(regx);//此时rs的gؓ{user1} <br />var rs2=str.match(regx);//此时rs的g然ؓ{user1} <br />如果regx=/user\d/gQ则rs的gؓ{user1,user2}Qrs2的g为{user1,user2} </p> <p>4Q对于String对象的replaceҎQ表辑ּ不加入gQ则只替换第一个匹配,如果加入gQ则替换所有匹配。(开头的三道试题能很好的说明这一点) </p> <p>5Q对于String对象的splitҎQ加上g与不加g是一LQ即Q?<br />var sep=/user\d/; <br />var array=“user1dfsfuser2dfsf”.split(sep); <br />则array的gؓ{dfsf, dfsf} <br />此时sep=/user\d/gQ返回值是一L?</p> <p>6Q对于String对象的searchҎQ加不加g也是一L?</p> <p>ȝ2Q附加参数m的用?</p> <p>附加参数mQ表明可以进行多行匹配,但是q个只有当用^?模式时才会v作用Q在其他的模式中Q加不加入m都可以进行多行匹配(其实说多行的字符串也是一个普通字W串Q,我们举例说明q一?</p> <p>1Q用^的例?<br />var regx=/^b./g; <br />var str=“bd76 dfsdf <br />sdfsdfs dffs <br />b76dsf sdfsdf”; <br />var rs=str.match(regx); <br />此时加入g和不加入gQ都只返回第一个匹配{bd}Q如果regx=/^b./gmQ则q回所有的匚w{bd,b7}Q注意如果regx=/^b./mQ则也只q回W一个匹配。所以,加入m表明可以q行多行匚wQ加入g表明可以q行全局匚wQ综合到一起就是可以进行多行全局匚w </p> <p>2Q用其他模式的例子Q例?<br />var regx=/user\d/; <br />var str=“sdfsfsdfsdf <br />sdfsuser3 dffs <br />b76dsf user6”; <br />var rs=str.match(regx); <br />此时不加参数gQ则q回{user3}Q加入参数gq回{user3,user6}Q加不加入mҎ没有影响?</p> <p>3Q因此对于m我们要清楚它的用,C它只对^?模式起作用,在这两种模式中,m的作用ؓQ如果不加入mQ则只能在第一行进行匹配,如果加入m则可以在所有的行进行匹配。我们再看一个^的例?<br />var regx=/^b./; <br />var str=“ret76 dfsdf <br />bjfsdfs dffs <br />b76dsf sdfsdf”; <br />var rs=str.match(regx); <br />此时rs的gؓnullQ如果加入gQrs的g然ؓnullQ如果加入mQ则rs的gؓ{bj}Q也是_在第一行没有找到匹配,因ؓ有参数mQ所以可以l去下面的行L是否有匹配)Q如果m和g都加上,则返回{bj,b7}Q只加m不加g说明Q可以去多行q行匚wQ但是找C个匹配后p回,加入g表明多行中所有的匚wq回Q当然对于matchҎ是如此,对于exec呢,则需要执行多ơ才能依ơ返回) </p> <p>ȝ3Q在HTML的textarea输入域中Q按一个Enter键,对应的控制字Wؓ“\r\n”Q即“回R换行”Q而不?#8220;\n\r”Q即“换行回R”Q我们看一个前面我们Dq的例子Q?<br />var regx=/a\r\nbc/; <br />var str=“a <br />bc”; <br />var rs=regx.exec(str); <br />l果Q匹配成功,rs的gؓQ{ }Q如果表辑ּ?a\n\rbc/Q则不会被匹配,因此在一般的~辑器中一?#8221;Enter”键代表着“回R换行”Q而非“换行回R”Q至在textarea域中是这L?/p> <p><br /> </p><img src ="http://www.aygfsteel.com/liuyz2006/aggbug/388367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/liuyz2006/" target="_blank">阿?/a> 2012-09-23 10:54 <a href="http://www.aygfsteel.com/liuyz2006/articles/388367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs面布局ȝhttp://www.aygfsteel.com/liuyz2006/articles/387305.html阿?/dc:creator>阿?/author>Sat, 08 Sep 2012 09:55:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/387305.htmlhttp://www.aygfsteel.com/liuyz2006/comments/387305.htmlhttp://www.aygfsteel.com/liuyz2006/articles/387305.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/387305.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/387305.html

ExtJs面布局ȝ

 

EXT标准布局c?/p>

面板相当于一张干净的白U,如果直接在上面添加内容,很难控刉板中内容的显CZ|,面板元素多p昑־凌ؕQ所以需要在面板上划分不同的区域Q将面板内容展示到希望的位置上。ExtJS通过提供多种布局cL为面板提供支持,主要包括如下10U: 
   ContainerLayoutQ容器布局Q?nbsp;
   FitLayoutQ自适应布局Q?nbsp;
   AccordionLayoutQ折叠布局Q?nbsp;
   CardLayoutQ卡片式布局Q?nbsp;
   AnchorLayoutQ锚点布局Q?nbsp;
   AbsoluteLayoutQ绝对位|布局Q?nbsp;
   FormLayoutQ表单布局Q?nbsp;
   ColumnLayoutQ列布局Q?nbsp;
   TableLayoutQ表格布局Q?nbsp;
   BorderLayoutQ边框布局Q?br />接下来分别介l这10U布局cȝ特点及用方式?br />1  ContainerLayout容器布局
    Ext.layout.ContainerLayout 提供了所有布局cȝ基本功能Q它没有可视化的外观Q只是提供容器作为布局的基本逻辑Q这个类通常被扩展而不通过 new 关键字直接创建。如果面板(panelQ没有指定Q何布局c,则它会作ؓ默认布局来创建,?-4是主要配|项?/p>

?-4  Ext.layout.ContainerLayout主要配置目?/p>


配置?/p>

参数cd

说明

activeItem

String/Number

一个对当前zdlg的引用。activeItem只在那些一ơ只能显CZ?items 目的布局中生效,例如QExt.layout.Accordion、Ext.layout.CardLayout、Ext.layout.FitLayout

 

FitLayout自适应布局

    Ext.layout.FitLayout 是布局的基c,对应面板布局配置(layoutQ的名称?fitQ?fit 布局面板子元素自动充满容器,如果在当前容器中存在多个子面板则只有W一个会被显C?br />    注意Q在本节的示例之前会单的介绍新概念,lg的xtypecd。xtypecd相当于组件的别名Q通过使用xtypecd可以实现lg的g时创建。在后箋的示例中会大量用xtype来创建组Ӟq将有利于读者Ş成用xtype的习惯,而减new关键字的使用?br />    下面是自适应布局的一个简单的CZ?br />    代码5-7QFitLayoutQ自适应布局Q示?br />  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   layout :'fit',
   title:'Ext.layout.FitLayout布局CZ',
   frame:true,                  //渲染面板
   height : 150,
   width : 250,
   applyTo :'panel',
   defaults : {                  //讄默认属?br />    bodyStyle:'background-color:#FFFFFF'       //讄面板体的背景?br />   },
//面板items配置w认的xtypecd为panelQ该默认值可以通过defaultType配置进行更?br />   items: [
    {
     title : '嵌套面板一',
     html : '面板一'
    },
    {
     title : '嵌套面板?,
     html : '面板?
    }
   ]
  })
 });
  </script>
    在代?-7中共为外层面板添加了2个子面板Qtitle分别?#8220;嵌套面板一”?#8220;嵌套面板?#8221;Qƈ指定外层面板的布局cd为fitQ由?5-11可以看到“嵌套面板一”充满了整个外层面板,?#8220;嵌套面板?#8221;q没有显C出来。运行效果如?-11所C?br />

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下
?-11  Ext.layout.FitLayout布局CZ

AccordionLayout折叠布局

    Ext.layout.Accordion 扩展?Ext.layout.FitLayout 布局Q对应面板布局QlayoutQ配|项的名UCؓaccordion。该布局会包含多个子面板QQ何时候都只有一个子面板处于打开状态,每个子面杉K内置了对展开和收~功能的支持。表5-5列出了它的主要配|项目?/p>

?-5  Ext.layout.Accordion主要配置目?/p>


配置?/p>

 

参数cd

说明

activeOnTop

 

Boolean

是否保持展开的子面板处于爉板的端Qtrue则交换当前展开面板到顶端,false则保持原来的位置不动?/p>

animate

 

Boolean

讄在展开或收~子面板时是否用滑动方式,true则采用滑动方式,默认为false?/p>

fill

 

Boolean

讄子面板是否自动调整高度充满父面板的剩余空_true则充满,默认为true?/p>

hideCollapse

Tool

Boolean

讄是否隐藏子面板的 “展开收羃” 按钮Qtrue表示隐藏Qfalse表示昄Q默认ؓfalse。如果设|ؓtrueQ则应titleCollapse配置也为true?/p>

titleCollapse

 

Boolean

讄是否允许通过点击子面板的标题来展开或收~面板,true表示允许Q默认ؓtrue?/p>


    下面是折叠布局的一个简单的CZ?br />    代码5-8QAccordionLayoutQ折叠布局Q示?br />  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   layout : 'accordion',
   layoutConfig :{
    activeOnTop : true,             //讄打开的子面板|顶
    fill : true,                     //子面板充满父面板的剩余空?br />    hideCollapseTool: false,         //昄“展开收羃”按钮
    titleCollapse : true,     //允许通过点击子面板的标题来展开或收~面?br />    animate:true          //使用动画效果
   },
   title:'Ext.layout.Accordion布局CZ',
   frame:true,                //渲染面板
   height : 150,
   width : 250,
   applyTo :'panel',
   defaults : {                 //讄默认属?br />    bodyStyle:'background-color:#FFFFFF;padding:15px'
                                      //讄面板体的背景?br />   },
   items: [
    {
     title : '嵌套面板一',
     html : '说明一'
    },
    {
     title : '嵌套面板?,
     html : '说明?
    } ,
    {
     title : '嵌套面板?,
     html : '说明?
    }
   ]
  })
 });
  </script>
    代码5-8所CAccordion布局可以在多个不同的子面板之间切换,适合于表现大量的分组内容或制作可以展的分组菜单Q在开发中使用较多的布局c,效果如图5-12~5-13所C?/p>

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下

CardLayout卡片式布局
    Ext.layout.CardLayout扩展自Ext.layout.FitLayout布局Q对应面板布局QlayoutQ配|项的名UCؓ card。该布局会包含多个子面板QQ何时候都只有一个子面板处于昄状态,q种布局cȝ常用来制作向导和标签c该布局的重Ҏ式是 setActiveItemQ因Zơ只能显CZ个子面板Q所以切换子面板的唯一途径是调用 setActiveItem ҎQ它接受一个子面板id或烦引作为参数。CardLayout布局q没有提供一个子面板的导航机ӞD逻辑需要开发h员自己实现?Ext.layout.CardLayout主要Ҏ如表5-6所C?/p>

?-6  Ext.layout.CardLayout主要Ҏ?/p>


 

Ҏ?/p>

 

 

说明

setActiveItem(

String/Number item ) : void

Ҏ子面?/p>

id

或烦引切换当前显C的子面?/p>


    下面是卡片式布局的一个简单的CZ?br />    代码5-9QCardLayoutQ卡片式布局Q示?br />  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   layout : 'card',
   activeItem : 0,                //讄默认昄W一个子面板
   title:'Ext.layout.CardLayout布局CZ',
   frame:true,                        //渲染面板
   height : 150,
   width : 250,
   applyTo :'panel',
   defaults : {                         //讄默认属?br />    bodyStyle:'background-color:#FFFFFF;padding:15px' //讄面板体的背景?br />   }, 
   items: [
    {
     title : '嵌套面板一',
     html : '说明一',
     id : 'p1'
    },
    {
     title : '嵌套面板?,
     html : '说明?,
     id : 'p2'
    },
    {
     title : '嵌套面板?,
     html : '说明?,
     id : 'p3'
    }
   ],
   buttons:[
    {
     text : '上一?,
     handler :changePage
    },
    {
     text : '下一?,
     handler :changePage
    }
   ]
  })
  //切换子面?br />  function changePage(btn){
   var index = Number(panel.layout.activeItem.id.substring(1));
   if(btn.text == '上一?){
    index -= 1;
    if(index <1){
     index = 1;
    }
   }else{
    index += 1;
    if(index >3){
     index = 3;
    }
   }
   panel.layout.setActiveItem('p'+index);
  }
 });
  </script>
    代码 5-9 演示?CardLayout 卡片式布局的用方式,q里的重Ҏ调用面板布局的setActiveItemҎȀzL定id的子面板q行昄Q其中changePage函数的用途是计算点击上一|下一之后将要显C的子面板idQ然后将该id传入到setActiveItemҎ中实现子面板的切换。运行效果如?5-14~5-15所C?/p>

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下 

AnchorLayout锚点布局

    Ext.layout.AnchorLayout 是根据容器大ؓ其所包含的子面板q行定位的布局Q对应面板布局QlayoutQ配|项的名UCؓ anchor。如果容器大发生变化,所有子面板的位|都会根据规则重新计,q自动渲染。用anchor布局需要注意以下配|项的用?nbsp;
    anchorSizeQ父容器提供Q?br />    anchor 布局提供?anchorSize 配置用来设|虚拟容器的大小Q默认情况下 anchor 布局是根据容器自w的大小来进行计定位的Q如果提供了 anchorSize 属性则 anchor 布局׃Ҏ该尺寸生成一个虚拟容器,然后Ҏq个虚拟容器的大来q行计算定位?nbsp;
    anchorQ子容器提供Q?br />    加入C?anchor布局面板中的子面板也都支持一?anchor配置,它是一个包?2个值的字符Ԍ水^值和垂直|例如Q?100% 50%'Q这个值告知父容器应该怎样为加入到其中的子面板q行定位Q有效值包括如?cR?nbsp;
    癑ֈ比(PercentageQ:1-100之间的Q意百分比Q第1ҎDC子面板占父容器宽度的百分比Q第2ҎDC子面板占父容器宽高的百分比Q例?100% 50%'表示Q子面板宽度为父容器?100%Q而高度ؓ父容器的 1/2Q如果只提供一个|如:'50%'Q则只对子面板的宽度生效Q高度保持默认倹{?nbsp;
    偏移|OffsetsQ:L整数Q可以ؓ正数也可以是负数Q第1ҎDC子面板到父容器双~的偏移量,W?ҎDC子面板到父容器下边~的偏移量,例如'-50 -100'表示Q子面板距父容器的右边缘偏移50像素Q即子面板的宽度为父容器的宽度减?0像素Q子面板距父容器的下边缘偏移100像素Q即子面杉K度ؓ父容器的高度减去100像素。如果只提供一个|如:'-50'Q则只对子面板的宽度生效Q高度保持默认倹{?nbsp;
    参考边QSidesQ:有效的值包?'right'Q或 'r'Q和'bottom'Q或 'b'Q。要求容器设|固定的大小或提供相应的anchorSize配置Ҏ会有正确的效果,例如'r b'Q说明父容器会计与子容器宽度和高度的差|然后按父容器体(bodyQ的实际宽度和高度减去这个差|重新为子面板定位?br />    以上3U赋值类型可以组合用,例如'-50 75%'Q下面将分别针对q?U情况D例说明?br />    1.  癑ֈ比(PercentageQ定?br />    在代?5-10 中创Z个用百分比方式为子面板q行定位的示例,从示例中可以清晰的体会到癑ֈ比定位的特点?br />    代码5-10Q百分比QPercentageQ定位示?br />  <script type="text/javascript">
 Ext.onReady(function(){ 
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   layout : 'anchor',
   title:'Ext.layout.AnchorLayout布局CZ',
   frame:false,             //渲染面板
   height : 150,
   width : 300,
   applyTo :'panel',
   defaults : {             //讄默认属?br />    bodyStyle:'background-color:#FFFFFF;padding:15px' //讄面板体的背景?br />   },
   items: [
    {
     anchor : '50% 50%',     //讄子面板的宽高为父面板?0%
     title : '子面?
    }
   ]
  })
 });
  </script>
    代码5-10演示了百分比QPercentageQ定位的使用方式Q其中anchor : '50% 50%'军_了子面板的高度和宽度都ؓ爉板的50%。运行效果如?-16所C?/p>

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下
?-16  Ext.layout.AnchorLayout布局CZQ百分比定位Q?br />2.  偏移|OffsetsQ定?br />    在代?5-11 中创Z个用偏Udgؓ子面板进行定位的CZQ从CZ中可以清晰的体会到偏Ud定位的特点?br />    代码5-11Q偏Ud|OffsetsQ定位示?br />  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   layout : 'anchor',
   title:'Ext.layout.AnchorLayout布局CZ',
   frame:false,//渲染面板
   height : 150,
   width : 300,
   applyTo :'panel',
   defaults : {//讄默认属?br />    bodyStyle:'background-color:#FFFFFF;padding:15px'//讄面板体的背景?br />   },
   items: [
   
     anchor : '-10 -10',    //讄子面板的宽高偏移爉?0像素
     title : '子面?
    }
   ]
  })
 });
  </script>
    代码5-11演示了偏Ud|OffsetsQ定位的使用方式Q其中anchor : '-10 -10',军_了子面板到父面板的右边和下边都ؓ10像素。运行效果如?-17所C?/div>
ExtJs面布局ȝ - 成功在脚下 - 成功在脚下
?-17  Ext.layout.AnchorLayout布局CZQ偏Ud定位)
3.  参考边QSidesQ定?br />    在代?5-12 中创Z个用参考边为子面板q行定位的示例,从示例中可以清晰的体会到参考边定位的特炏V?br />    代码5-12Q参考边QSidesQ定位示?br /><script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   layout : 'anchor',
   title:'Ext.layout.AnchorLayout布局CZ',
   autoScroll :true,//自动昄滚动?br />   frame:false,//渲染面板
   height : 150,
   width : 300,
   applyTo :'panel',
   defaults : {//讄默认属?br />    bodyStyle:'background-color:#FFFFFF;padding:15px'//讄面板体的背景?br />   },
   items: [
    {
     anchor : 'r b',    //相对于父容器的右边和底边的差D行定?br />     width : 200,
     height : 100,
     title : '子面?
    }
   ]
  })
 });
</script>
    代码5-12演示了参考边QSidesQ定位的使用方式Q其中anchor : 'r b',,军_了子面板相对于爉板的双和底边的差D行定位。运行效果如?-18所C?/div>
ExtJs面布局ȝ - 成功在脚下 - 成功在脚下 
?-18  Ext.layout.AnchorLayout布局CZQ参考边定位Q?/div>

    在代?-12中用参考边为子面板q行定位Q下面给Z计算q程的简要说明:
     宽度计算Q?br />         父容器体(body)宽度?= 298Q说明:300减去左右两条边的宽度Q?br />         宽度差gؓ =  100Q说明:父容器体(body)宽度300 – 子容器宽?00Q?br />         计算后的子容器宽度ؓ = 198Q说明: 298 - 100Q?br />    高度计算Q?br />         父容器体(body)高度?= 123Q说明:150减去上下两条边的宽度和header的高度)
         高度差gؓ  50Q说明:父容器高?50 – 子容器高?00Q?br />         计算后的子容器高度ؓ =  73Q说明:123 -50Q?br />6  AbsoluteLayoutl对位置布局

    Ext.layout.AbsoluteLayout扩展自Ext.layout.AnchorLayout布局Q对应面板布局QlayoutQ配|项的名UCؓ absolute。它可以Ҏ子面板中配置?x/y坐标q行定位Qƈ且坐标值支持用固定值和癑ֈ比两UŞ式。下面是l对位置布局的简单的CZ?br />    代码5-13QAbsoluteLayoutl对位置布局CZ
  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   layout : 'absolute',
   title:'Ext.layout.AbsoluteLayout布局CZ',
   frame:false,              //渲染面板
   height : 150,
   width : 300,
   applyTo :'panel',
   defaults : {               //讄默认属?br />    bodyStyle:'background-color:#FFFFFF;padding:15px' //讄面板体的背景?br />   },
   items: [
    {
     x : '10%',      //横坐标ؓ距父容器宽度10%的位|?br />     y : 10,        //U坐标ؓ距父容器上边~?0像素的位|?br />     width : 100,
     height : 50,
     title : '子面板一'
    },
   x:90,     //横坐标ؓ距父容器左边~?0像素的位|?br />     y : 70,     //U坐标ؓ距父容器上边~?0像素的位|?br />     width : 100,
     height : 50,
     title : '子面板二' 
    }
   ]
  })
 });
  </script>
    代码5-13演示了AbsoluteLayoutQ绝对位|布局Q的使用方式Q在CZ中子面板的x、y配置决定了它在爉板中的具体位|。运行效果如?-19所C?/p>

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下 
?-19  Ext.layout.AbsoluteLayout布局CZ

FormLayout表单布局

    Ext.layout.FormLayout是ؓ表单Ҏ设计的布局Q用来管理表单字D늚昄Q通常情况下直接用Ext.form.FormPanel 表单面板Q因为它已经内置了表单布局Qƈ且提供了表单提交、读取等表单的功能。用form布局的容器可以用是些表单特有的配置,它们包括Q?nbsp;
    hideLabels: (Boolean) Q是否隐藏字D|{,默认为false?nbsp;
    itemCls: (String) Q每个字D项和字D|{上的样式类Q默认gؓ'x-form-item'?nbsp;
    labelAlign: (String) Q字D|{寚w方式Q默认ؓIC左寚w?nbsp;
    labelPad: (Number) Q字D|{与字段直接的空白,默认?5Q该只在提供labelWidth配置的情况下生效?nbsp;
    labelWidth: (Number) Q字D|{宽度Q默认ؓ100?Mlg都可以加入到表单布局的容器当中,但是扩展?Ext.form.Field cȝlg可以支持一些表单项的特D属性,它们包括Q?nbsp;
    clearCls: (String) Q应用到专门的清除div上的样式Q默认ؓ'x-form-clear-left'?nbsp;
    fieldLabel: (String) Q字D|{上的文本,默认?'?nbsp;
    hideLabel: (Boolean) Q设|是否隐藏标{֒分割W,默认为false?nbsp;
    itemCls: (String) Q应用到表单字段及标{上的样式类Q默认ؓ'x-form-item'?nbsp;
    labelSeparator: (String) Q字D|{֒字段本n直接的分隔符Q默认ؓ':'?nbsp;
    labelStyle: (String) Q应用到字段标签上的样式cR?br />    Ext.layout.FormLayout主要配置目如表5-7所C?/p>

?-7  Ext.layout.FormLayout主要配置目?/p>


配置?/p>

参数cd

说明

elementStyle

String

应用到每一个布局中元素上的样式类Q默认ؓ''

labelSeparator

String

字段标签与字D|w直接的分隔W,默认?:'。如果布局和面板中同时配置了labelSeparatorQ则面板中的讄会覆盖布局中的讄?/p>

labelStyle

String

应用到每一个字D|{上的样式类Q默认ؓ''?/p>


    下面是表单布局的简单的CZQ在CZ中创Z一个包含用户名和密?个输入字D늚面板Q这个面板最l生成的效果与第4章中介绍的FormPanel相同?br />    代码5-14Q?FormLayoutQ表单布局Q示?br /><script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  Ext.QuickTips.init();
  var panel = new Ext.Panel({
   title:'Ext.layout.FormLayout布局CZ',
   layout : 'form',
   labelSeparator : 'Q?,           //在容器中指定分隔W?br />   frame:true,                   //渲染面板
   height : 110,
   width : 300,
   applyTo :'panel',
   defaultType: 'textfield',        //指定容器子元素默认的xtypecd为textfield
   defaults : {                  //讄默认属?br />    msgTarget: 'side'         //指定默认的错误信息提C方?br />   },
   items: [
    {
     fieldLabel:'用户?,
     allowBlank :false
    },
    {
     fieldLabel:'密码',
     allowBlank :false
    }
   ]
  })
 });
</script>
   代码5-14演示?FormLayoutQ表单布局Q的使用方式Q通过表单布局创徏的面板与使用FormPanel创徏的表单面板功能相同。运行效果如?-20所C?/p>

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下 
?-20  Ext.layout.FormLayout布局CZ

ColumnLayout列布局

    Ext.layout.ColumnLayout对应面板布局layout配置的名称为column。这是一U多列风格的布局样式Q每一列的宽度都可以根据百分比或固定值来q行讄Q高度允许根据内容进行变化,它支持一个特D的属?columnWidthQ每一个加入到容器中的子面杉K可以通过columnWidth配置Ҏ定百分比或用width配置Ҏ定固定|来确定列宽?width 配置Ҏ以像素ؓ单位的固定宽度,必须是大于或{于 1 的数字。columnWidth配置Ҏ已百分比为单位的相对宽度Q必L大于0于1的小敎ͼ例如“.25”?br />    注意Q所有列的columnWidth值相加必ȝ??br />    1.  指定固定列宽
    代码 5-15 中将创徏了包?2 个子面板的列布局CZQƈ指定列的固定宽度?100Q看下面的代码?br />    代码5-15Q指定固定列宽示?br />  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  Ext.QuickTips.init();
  var panel = new Ext.Panel({
   title:'Ext.layout.ColumnLayout布局CZ',
   layout : 'column',
   frame:true,//渲染面板
   height : 150,
   width : 250,
   applyTo :'panel',
   defaults : {//讄默认属?br />    bodyStyle:'background-color:#FFFFFF;',//讄面板体的背景?br />    frame :true
   },
   items: [
    {
     title:'子面板一',
     width:100,             //指定列宽?00像素
     height : 100
    },
    {
     title:'子面板二',
     width:100,            //指定列宽?00像素
     height : 100
    }
   ]
  })
 });
  </script>
    代码5-15演示了ColumnLayoutQ列布局Q指定固定列宽的用法Q子面板的width配置
用于设|列宽。运行效果如?-21所C?/p>

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下 
?-21  Ext.layout.ColumnLayout布局CZQ固定列宽)
2.  使用癑ֈ比指定列?br />    在代?-16中将创徏了一个包?个子面板的列布局CZQƈ分别指定列的相对宽度 ?0%?0%Q?0%?3表示,70%?7表示Q,看下面的代码?br />    代码5-16Q用百分比指定列宽CZ
  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  Ext.QuickTips.init();
  var panel = new Ext.Panel({
   title:'Ext.layout.ColumnLayout布局CZ',
   layout : 'column',
   frame:true,//渲染面板
   height : 150,
   width : 250,
   applyTo :'panel',
   defaults : {//讄默认属?br />    bodyStyle:'background-color:#FFFFFF;',//讄面板体的背景?br />    frame :true
   },
   items: [
    {
     title:'子面板一',
     columnWidth:.3,   /指定列宽为容器宽度的30%
     height : 100
    },
    {
     title:'子面板二',
     columnWidth:.7,     //指定列宽为容器宽度的70%
     height : 100
    }
   ]
  })
 });
  </script>
    代码 5-16 演示?ColumnLayoutQ列布局Q用百分比指定列宽的用法,子面板的
columnWidth配置用于设|列对应的百分比。运行效果如?-22所C?/div>
ExtJs面布局ȝ - 成功在脚下 - 成功在脚下 
?-22  Ext.layout.ColumnLayout布局CZQ百分比列宽Q?br />3.  固定g癑ֈ比结合?br />    在代?-17中创Z包含3个子面板的列布局CZQؓ“子面板一”指定固定宽度100Q?#8220;子面板二”相对宽度?0%Q?#8220;子面板三”的相对宽度ؓ70%Q请看下面的代码?br />    代码5-17Q固定g癑ֈ比结合用示?br />  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  Ext.QuickTips.init(); 
  var panel = new Ext.Panel({
   title:'Ext.layout.ColumnLayout布局CZ',
   layout : 'column',
   frame:true,//渲染面板
   height : 150,
   width : 350,
   applyTo :'panel',
   defaults : {//讄默认属?br />    bodyStyle:'background-color:#FFFFFF;',//讄面板体的背景?br />    frame :true
   },
   items: [
    {
     title:'子面板一',
     width : 100,     //指定列宽?00像素
     height : 100
    },
    {
     title:'子面板二',
     columnWidth:.3,   /指定列宽为容器剩余宽度的30%
     height : 100
    },
    {
     title:'子面板三',
     columnWidth:.7,   /指定列宽为容器剩余宽度的70%
     height : 100
    }
   ]
  })
 });
  </script>
    在代?-17中同时用了固定值和癑ֈ比两U方式来指定列宽Q通过观察?-17可以看到Q固定g先于癑ֈ比进行计,也就是说癑ֈ比计的基础宽度是父容器的宽度减d定列宽之后剩余的宽度倹{运行效果如?-23所C?/div>
ExtJs面布局ȝ - 成功在脚下 - 成功在脚下 
?-23  Ext.layout.ColumnLayout布局CZQ固定g癑ֈ比结合)

   下面以一个简单的公式q行说明Q?br />    W一列宽?=  100 Q说明,W一列是通过width配置Ҏ定的固定|?br />    W二列宽?= Q?50 – 100 Q? 0.3 Q说明:按比例分割剩余宽度)?br />    W三列宽?= Q?50 – 100 Q? 0.7 Q说明:按比例分割剩余宽度)?/p>

TableLayout表格布局 

    Ext.layout.TableLayout对应面板布局layout配置的名称为table。这U比较允怽非常Ҏ的渲染内容到HTML表格中,可以指定列数QcolumnsQ,跨行QrowspanQ,跨列QcolspanQ,可以创徏出复杂的表格布局?br />    注意Q必M用layoutConfig属性来指定属于此布局的配|,table布局仅有唯一的布局配置columnsQ而包含在其中的子面板会具有rowspan和colspan两个配置V?br />    下面是表格布局的一个简单的CZ?br />     代码5-18QTableLayoutQ表格布局Q示?br /><script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   title:'Ext.layout.TableLayout布局CZ',
   layout :'table',
   layoutConfig :{
    columns : 4 //讄表格布局默认列数??br />   },
   frame:true,//渲染面板
   height : 150,
   applyTo :'panel',
   defaults : {//讄默认属?br />    bodyStyle:'background-color:#FFFFFF;',//讄面板体的背景?br />    frame :true,
    height : 50
   },
   items: [
    {
     title:'子面板一',
     colspan : 3   //讄跨列
    },
    {
     title:'子面板二',
     rowspan :2,  /讄跨行
     height : 100
    },
    {title:'子面板三'},
    {title:'子面板四'},
    {title:'子面板五'}
   ]
  })
 });
</script>
     代码5-18演示了TableLayoutQ表格布局Q的使用方式Q其中子面板的colspan和rowspan配置决定了它跨列和跨行的数量,另外需要指出的是,子面板在爉板中是从上到下由左至双行顺序排列的。效果如?-24所C?/p>

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下 
?-24  Ext.layout.TableLayout布局CZ

10  BorderLayoutҎ布局

    Ext.layout.BorderLayout 对应面板布局 layout 配置的名称?border。该布局包含多个子面板,是一个面向应用的UI风格的布局Q它整个容器分?个部分,分别是:east、south、west?north、center。加入到容器中的子面杉K要指定region 配置Ҏ告知容器要加入到那个部分Qƈ且该布局q内Z寚w板分隔栏的支持。下面是Ҏ布局的一个简单的CZ?br />    Zq行说明Q将在代?-19中创Z个包含全部border布局部分的示例,q个CZ可以形象的展Cborder布局的结构?br />    代码5-19QBorderLayoutQ边框布局Q示?br />  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   title : 'Ext.layout.BorderLayout布局CZ',
   layout:'border',//表格布局
   height : 250,
   width : 400,
   applyTo : 'panel',
   items: [
   {
    title: 'northPanel',
    html : '上边',
    region: 'north',            //指定子面板所在区域ؓnorth
    height: 50
   },
   {
    title: 'SouthPanel',
    html : '下边',
    region: 'south',           //指定子面板所在区域ؓsouth
    height: 50
   },{
    title: 'West Panel',
    html : '左边',
    region:'west',            //指定子面板所在区域ؓwest
    width: 100
   },{
    title: 'east Panel',
    html : '双',
    region:'east',           //指定子面板所在区域ؓeast
    width: 100
   },{
    title: 'MainContent',
    html : '中间',
    region:'center'          //指定子面板所在区域ؓcenter
   }]
  });
 });
  </script>
    q行代码5-19会得到如下页面效果,从图中可以看到整个页面分?个部分,q里重点是对region配置的使用Q它军_了子面板在border布局的显C,效果如图5-25所C?/p>

ExtJs面布局ȝ - 成功在脚下 - 成功在脚下


]]>Ext2.0中的form使用实例 http://www.aygfsteel.com/liuyz2006/articles/386914.html阿?/dc:creator>阿?/author>Mon, 03 Sep 2012 15:16:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/386914.htmlhttp://www.aygfsteel.com/liuyz2006/comments/386914.htmlhttp://www.aygfsteel.com/liuyz2006/articles/386914.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/386914.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/386914.html

Ext2.0中的form使用实例  

Ext2.0的form不单增加了时间输入控件、隐藏输入控Ӟq修改了创徏ҎQ通过formpanel代替了原来formQcolumn也根据新的布局定义更新了定义方式。M来说Q定义一个form更简单便捷了。本文将通过一个实例介l一?.0的form的创Z及其大部分控件的使用ҎQ因水^有限Q错漏难免,忘大家多多谅解!

我们先来看看我们要设计的form的情况:

 

呵呵Qform有点杂ؕQ不q在q个fomr里包含了l大部分Ext2.0的控Ӟ我将会和大家一h讨一下这些控件的使用?/p>

在创Z个form之前Q我们先增加以下语句Q?/p>

Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';

 W一句的目的是ؓ需要的元g提供提示信息功能Qform的主要提CZ息就是客L验证的错误信息了?/p>

W二句的目的是讄控g的错误信息显CZ|,主要可选的位置有:

位置?/p>

描述

qtip

当鼠标移动到控g上面时显C提C?/p>

title

在浏览器的标题显C,但是试l果是和qtip一L

under

在控件的底下昄错误提示

side

在控件右ҎCZ个错误图标,鼠标指向图标时显C错误提C?/p>

[element id]

错误提示昄在指定id的HTML元g?/p>

q个大家可以Ҏ各h喜好讄Q我习惯使用“side”Q这里有一点要注意的,是注意控制控g的宽度,以防不够宽度昄错误图标Q这个下面会说到?/p>

好了Q现在创建我们的formQ?.0的方法就是直接创Z个formpanelQ?/p>

 var simpleForm = new Ext.FormPanel({
labelAlign: 'left',
title: '表单例子',
buttonAlign:'right',
bodyStyle:'padding:5px',
width: 600,
frame:true,
labelWidth:80,
items: [],
buttons: []
});
simpleForm.render(document.body);

在formpanle里,我们定义了form控g的标题是在左边的QlabelAlign: 'left'Q;form的标题栏昄标题“表单的例?#8221;Q它的按钮位|是在右寚w的(buttonAlign:'right'Q;边的cd讄了内补丁 5pxQbodyStyle:'padding:5px'Q;d度是600pxQ设|了面板的边角是圆弧q度的(frame:trueQ,我设|这个属性主要目的不是因角,而是因ؓ背景Q如果不讄q个Q背景颜色将为白Ԍ讄了这个将会加入v蓝色的背景图Q好看点Q还讄了form控g的标题宽度是80pxQlabelWidth:80Q。还有一些其它的讄选项Q我q里׃多说Q大家可以参?.0的API?/p>

items数组的设|是我们的重点了Qform上的所有控仉是在q里讄的?/p>

从form的结构图中看刎ͼform整体上是分了两列的(实际上不是的Q呵呵)。因分列Q所以要使用columnLayoutcR在使用 columnLayoutcM前,我们需要了解一下CSS中float属性的作用Q改属性主要作用是讄对象是否及如何Q动,属性gؓnone、left 和right三个。column讄是leftQ意思就是对象Q在左边的。那q个有什么作用呢Q其实这个和我们在word中输入文字,默认文字是左寚w的,当一行文字的宽度过面的宽度时自动换行是一L?我们通过一个例子来说明一下?/p>

首先我们定义一个divQ背景色是黑Ԍ宽度和高度都?00Q?/p>

 <div style='background:black;width:200px;height:200px;'>
</div>

然后在里面加?个divQ每个宽度和高度都是200Q背景色一个是U色Q一个是l色Q?/p>

<div style='background:black;width:200px;height:200px;'>
<div style='background:red;width:50px;height:50px;'></div>
<div style='background:green;width:50px;height:50px;'></div>
</div>

我们来看看效果:

 

在没有用float之前Q两个子div是分别各占一行的。好Q现在我们在两个子div中加?#8220;float:left”在看看效果:

<div style='background:black;width:200px;height:200px;'> 

<div style='background:red;width:50px;height:50px;float:left;'></div>

<div style='background:green;width:50px;height:50px;float:left;'></div>

</div>

两个子div出现在同一行了。我们复制一下两个子divQ粘贴两ơ,然后看看效果Q?/p>

 <div style='background:black;width:200px;height:200px;'>
<div style='background:red;width:50px;height:50px;float:left;'></div>
<div style='background:green;width:50px;height:50px;float:left;'></div>
<div style='background:red;width:50px;height:50px;float:left;'></div>
<div style='background:green;width:50px;height:50px;float:left;'></div>
<div style='background:red;width:50px;height:50px;float:left;'></div>
<div style='background:green;width:50px;height:50px;float:left;'></div>
</div>

 6个子div有序的按左对齐方式排列在一起了Q当一行的子div的宽度超q了父div的宽度时Q子div自动换行CW二行?/p>

不知道大家是否看得明白?看不明白自己再动手改变一下子div的宽度和高度Q看看效果。column的工作方式就是这L。明白这个很重要Q因为在定义checkbox和radio的时候,如果惛_们的选项在同一行,p注意column的宽度,不然无法让他们在同一行。不q现在column是通过癑ֈ比来定义宽度的,我们只要控制好百分比p了?/p>

好了Q我们l写formQ因用到columnQ所以我们先在formpanel的itmes加入一个column的定义:

{
layout:'column',
border:false,
labelSeparator:'Q?,
items:[]
}

 代码里定义了在这里用的是columnlayoutQlayout:'column'Q;没有边(border:falseQ;标题的分隔符h们用中文冒号代替英文的冒PlabelSeparator:'Q?Q。coulmnLayout里的控g定义在items里?/p>

我们首先在items里加入一个常用输入控Ӟ是用来输入姓名的Q?/p>

{
columnWidth:.5,
layout: 'form',
border:false,
items: [{
xtype:'textfield',
fieldLabel: '姓名',
name: 'name',
anchor:'90%'
}]
}

 我们讄了该列的宽度占d度的50%QcolumnWidth:.5Q;在布局里放了一个formlayout用来攄控gQlayout: 'form'Q;formlayout也是没有边的Qborder:falseQ。在formlayout里有一个类型ؓ textfield'Qxtype:'textfield'Q的输入控g。控件标题ؓ姓名QfieldLabel: '姓名'Q,输入框(inputQ的name属性设|?#8220;name”Qname: 'name'Q,输入框的长度为列宽减L题的宽度后的90%Qanchor:'90%'Q,余下?0%的是l显C错误信息图标用的?/p>

在加入性别的radio控g时就要注意了Q这里需要加入两个radioQ第一radio是有标题的,W二是没有的Q而且两个radio加v来的宽度应该正好是余下的列宽Q?0%Q:

 从代码中可以看到Q除了列宽设|ؓ25%外,其它的列讄和第一控g是一栗Formlayout里加入了一个类型ؓradio的控件。控件的标题是性别Q控件的选择昄文本是男QboxLabel:'PQinput的name属性值是sexQname: 'sex'Q,该控仉认是已选的Qchecked:trueQ,控g的|valueQ是PinputValue:'?Q,input的宽度是 95%。在q里我还讄一个css属性,剙的外补丁?pxQstyle:'margin-top:5px'Q,原因是ؓ了选择按钮和标题对齐,大家可以该属性去掉然后看看效果?/p>

W二个raido控g的列讄有所不同Q因为它不需要标题,所以要讄隐藏标题QhideLabels:trueQ,标题的宽度设|ؓ 0QlabelWidth:0Q?q要讄其标题分隔符号ؓI(labelSeparator:''Q。其余的讄和第一个radio的设|没有不同,只是input的g同了?/p>

我们已经讄?列,3列的列宽分别?0%?5%?5%Q根据float的原则,下一列将从第二行开始?/p>

在第二行W一列我们要增加的是一个日期选择控gQ?/p>

{

columnWidth:.25,

layout: 'form',

border:false,

items: [{

style:'margin-top:5px',

xtype:'radio',

fieldLabel: '性别',

boxLabel:'?,

name: 'sex',

checked:true,

inputValue:'?,

anchor:'95%'

}]

},{

columnWidth:.25,

layout: 'form',

labelWidth:0,

labelSeparator:'',

hideLabels:true,

border:false,

items: [{

style:'margin-top:5px',

xtype:'radio',

fieldLabel: '',

boxLabel:'?,

name: 'sex',

inputValue:'?,

anchor:'95%'

}]

}

{
columnWidth:.5,

layout: 'form',

border:false,

items: [{

xtype:'datefield',

fieldLabel: '出生日期',

name: 'birthday',

anchor:'90%'

}]

}
日期控g的列宽也?0%Q列的其它设|没有变化。控件的cd为datefieldQ标题是出生日期Qinput的name属性是birthdayQintput宽度也是讄?0%Q出来留出空位给错误信息外,q可以让控g与上一行的姓名的宽度相同,整列看v来比较整齐?/p>

日期控g的设|和普通文本输入的讄一L单,q里׃多说了。不q要说到的是汉化的问题。在2.0版自带的本地化文件ext-lang-zh.js中存在一些小bugQ我们需要自׃改一下?/p>

首先要修改的是周的显C,原来的定义是Q?/p>

 因ؓ在日期选择中显C的区域不够宽,只能昄一个汉字,所以需要将上面定义的把“?#8221;LQ修改ؓQ?/p>

Date.dayNames = [ 

"周日",

"周一",

"周二",

"周三",

"周四",

"周五",

"周六"

];

 Date.dayNames = [
"?,
"一",
"?,
"?,
"?,
"?,
"?
];

在年份和月䆾选择中的按钮文字q是英文“ok”?#8220;cancel”的,q里我们也需要修改一下:

 if(Ext.DatePicker){
Ext.apply(Ext.DatePicker.prototype, {
todayText : "今天",
minText : "日期在最日期之?,
maxText : "日期在最大日期之?,
disabledDaysText : "",
disabledDatesText : "",
monthNames : Date.monthNames,
dayNames : Date.dayNames,
nextText : '下月 (Control Right)',
prevText : '上月 (Control Left)',
monthYearText : '选择一个月 (Control Up/Down 来改变年)',
todayTip : "{0} (Spacebar)",
okText : "定",
cancelText : "取消",
format : "yqm月d?
});
}

上面定义中黑色字体部分就是要加入的代码。如果不喜欢默认格式?#8220;yqm月d?#8221;Q需要修改:

 if(Ext.form.DateField){
Ext.apply(Ext.form.DateField.prototype, {
disabledDaysText : "用",
disabledDatesText : "用",
minText : "该输入项的日期必d {0} 之后",
maxText : "该输入项的日期必d {0} 之前",
invalidText : "{0} 是无效的日期 - 必须W合格式Q?{1}",
format : "Y-m-d"
});
}
修改DatePicker不会改变DateField的格式的Q这个自己根据情况决定,呵呵?/p>

我们l箋Q现在需要加入一个学历的下拉选择控g。下来选择控g最重要的一个定义就是数据的定义的,数据定义错误Q可能得不到我们需要的效果Q也是很多朋友感觉最ȝ的地斏V?/p>

 {
columnWidth:.5,
layout: 'form',
border:false,
items: [{
xtype:'combo',
store: new Ext.data.SimpleStore(
{
fields: ["retrunValue", "displayText"],
data: [[1,'学'],[2,'初中'],[3,'高中'],[4,'中专'],[5,'大专'],[6,'大学']]
}),
valueField :"retrunValue",
displayField: "displayText",
mode: 'local',
forceSelection: true,
blankText:'请选择学历',
emptyText:'选择学历',
hiddenName:'education',
editable: false,
triggerAction: 'all',
allowBlank:false,
fieldLabel: '学历',
name: 'education',
anchor:'90%'
}]
}

列的定义׃说了Q没变化。在items里,cd讄成combo了,在这里定义了一个sotre属性,是选择值存储的地方Q因为是在客L的数据,所以用了一个简单存储(SimpleStoreQ。在存储里,我们通过一个数l定义了retrunValue和displayText两个字段?retrunValue字段指定是提交给后台的|displayText字段指定是在下拉中显C的选择倹{然后我们在data里定义了几组数据Qdata: [[1,'学'],[2,'初中'],[3,'高中'],[4,'中专'],[5,'大专'],[3,'大学']]Q,我们可以看到Q每l数据都是根?fiedls的定义来l成的,数组里第一个值就是retrunValue的|W二个值就是displayText的|例如[1,'学']Q就表示 retrunValue?QdisplayText是小学?/p>

下面是很重要的一步了Q设|下拉选择框的值和昄文本。本例中讄了下拉选择框的提交值对象的是存储中的retrunValue字段QvalueField :"retrunValue"Q,昄文本是存储中的displayText字段QdisplayField: "displayText"Q,通过q两个设|就可将存储中的数据和下拉框对应h?/p>

因ؓ数据是在本地Q所以设|了模式为localQmode: 'local'Q。该下拉列表只允讔R择Q不允许输入Qeditable: falseQ,而且是必选择一个选项QforceSelection: trueQ。在没有选择值时昄为选择学历QemptyText:'选择学历'Q。提交formӞ该项如果没有选择Q则提示错误信息“请选择学历” QblankText:'请选择学历'Q。该选项g允许为空QallowBlank:falseQ?strong>大家要注意的?/strong>hiddenName和name属性,name只是改下拉的名称Q作用是可通过Q而hiddenName才是提交到后台的input的name。如果没有设|hiddenNameQ在后台是接收不到结构的Q这个大家一定要注意?/strong>

因ؓq个下拉是只能选择的,所以一定要讄属性triggerAction为allQ不然当你选择了某个选项后,你的下拉只会出现匹配选项值文本的选择,其它选择Ҏ不会再显CZQ这样你׃能更改其它选项了?/p>

如果要ؓ控g讄默认|p|属性valueQvalue的D讄为提交给后台的|不要讄为显C文本。例如本例要讄大学为默认值得Q则讄value的gؓ6?/p>

现在到第三行了,我们要创Z个checkbox选项输入Q?/p>

 {
columnWidth:.35,
layout: 'form',
border:false,
items: [{
xtype:'checkbox',
fieldLabel: '权限l?,
boxLabel:'pȝ理?,
name: 'popedom',
inputValue:'1',
anchor:'95%'
}]
},{
columnWidth:.2,
layout: 'form',
labelWidth:0,
labelSeparator:'',
hideLabels:true,
border:false,
items: [{
xtype:'checkbox',
fieldLabel: '',
boxLabel:'理?,
name: 'pepedom',
inputValue:'2',
anchor:'95%'
}]
},{
columnWidth:.2,
layout: 'form',
labelWidth:0,
labelSeparator:'',
hideLabels:true,
border:false,
items: [{
xtype:'checkbox',
fieldLabel: '',
boxLabel:'普通用?,
name: 'pepedom',
inputValue:'3',
anchor:'95%'
}]
},{
columnWidth:.25,
layout: 'form',
labelWidth:0,
labelSeparator:'',
hideLabels:true,
border:false,
items: [{
xtype:'checkbox',
fieldLabel: '',
boxLabel:'访客',
name: 'pepedom',
inputValue:'4',
anchor:'95%'
}]
}
checkbox的设|和radio的设|大同小异,大家注意列宽的定义就行?/p>

W四行的两个输入框主要是试通过vtypes属性来验证输入框的输入的:

 {
columnWidth:.5,
layout: 'form',
border:false,
items: [{
xtype:'textfield',
fieldLabel: '电子邮g',
name: 'email',
vtype:'email',
allowBlank:false,
anchor:'90%'
}]
},{
columnWidth:.5,
layout: 'form',
border:false,
items: [{
xtype:'textfield',
fieldLabel: '个h主页',
name: 'url',
vtype:'url',
anchor:'90%'
}]
}]
}

q里的定义和普通的文本输入框没什么区别,只是多了一个vtypes的属性定义。Vtypes里d定义了email、url、alpha?alphanum四种cd数据格式Qemail和urlq个不用介绍了,呵呵。alpha是字母和下划U的l合Qalphanum是字母、下划线和数字的l合?/p>

下面要加入一个tabpanelQ加?个tabc?/p>

 {
xtype:'tabpanel',
plain:true,
activeTab: 0,
height:235,
defaults:{bodyStyle:'padding:10px'},
items:[]
}

要注意的是,q个tabpanel不是在上面coulmn的items里加的,因ؓ不在column里。我们加在formpanel里。把item cd讄?tabpanel'p了,然后标{N头的背景讄为透明的(plain:trueQ,当前zd的标{N是第一(activeTab: 0Q,高度讄?35pxQheight:235Q,tab늚面板使用内补?0pxQdefaults: {bodyStyle:'padding:10px'}Q?/p>

好了Q现在在tabpanel的items加入标签c第一主要有两个输入控gQ一个是vtypescdalphanum的登录输入框和一个密码输入框?/p>

 {
title:'d信息',
layout:'form',
defaults: {width: 230},
defaultType: 'textfield',
items: [{
fieldLabel: 'd?,
name: 'loginID',
allowBlank:false,
vtype:'alphanum',
allowBlank:false
},{
inputType:'password',
fieldLabel: '密码',
name: 'password',
allowBlank:false
}]
}

在标{֮义了Q设|了标签标题是登录信息(title:'d信息'Q,控g容器是formlayoutQlayout:'form'Q,控g的默认宽度是230pxQdefaults: {width: 230}Q,默认控gcd是textfieldQdefaultType: 'textfield'Q?/p>

两个控g的定义与前面的textfield定义没什么区别,只是密码输入框需要定义input控g的类型ؓpasswordQinputType:'password'Q。两个控仉不允ؓI(allowBlank:falseQ?/p>

W二个标{N里有numberfield、timefield和textfield三个控gQ?/p>

 {
title:'数字旉字母',
layout:'form',
defaults: {width: 230},
defaultType: 'textfield',
items: [{
xtype:'numberfield',
fieldLabel: '数字',
name: 'number'
},{
xtype:'timefield',
fieldLabel: '旉',
name: 'time'
},{
fieldLabel: 'U字?,
name: 'char',
vtype:'alpha'
}]
}

Numberfield֐思义是只能输入数字的输入控件。在该例子,没做最大倹{最gQ何限Ӟ如果要设|最大值和最|分别讄 maxValue和minValue两个属性就行了。如果要讄数字输入长度Q例如n份证LQ可以设|maxLength和minLength两个属性。可以通过讄maxText、minText、maxLengthText和minLengthText讄各自的验证出错信息。可通过 allowDecimals属性设|是否只允许输入整型|默认值是trueQ允许输入QҎ。设|allowNegative讄是否只允许输入正敎ͼ默认值是trueQ允许输入正负数。通过decimalPrecision属性可讄数点后的位敎ͼ默认值是2位?/p>

timefield是新增加的时间输入控Ӟ起I补日期输入控件不能输入时间的作用。它的定义也很简单,讄cd为timefieldp了?timefield默认旉格式?2时制的Q我们可通过修改format属性来修改其数据格式。通过讄increment属性可讄下拉选择值得旉区间Q默认值是15分钟的。还可以和数字输入控件一栯|最大值和最倹{下拉的讄和combobox是一L?/p>

在目前的版本中,timefieldc还没有汉化Q所以我们要在本地文件中加入timefield的汉化定义:

 if(Ext.form.TimeField){
Ext.apply(Ext.form.TimeField.prototype, {
format:'G:i:s',
minText : "该输入项的时间必d于或{于Q?{0}",
maxText : "该输入项的时间必d于或{于Q?{0}",
invalidText : "{0}不是有效的时?,
});
}

在这里,我默认定义了旉格式?4时制的Q小时ؓ个位数是不加前缀0?/p>

最后一个加入的是测试纯字母输入的,和email{是一LQ我׃介绍了?/p>

在最后一个tab中加入了一个textarea输入Q?/p>

 {
title:'文本区域',
layout:'fit',
items: {
xtype:'textarea',
id:'area',
fieldLabel:''
}
}

和textfield一P只要讄cd为textarea可以了Q唯一的区别是Z让textarea和面板自适应面板Q用了fitlayout作ؓ它的容器Q所以在q里我们不用讄textarea的宽度和高度?/p>

最后一步就是ؓformd按钮了,在formpanel的buttons属性中我们加入了一个保存按钮和取消按钮Q?/p>

 buttons: [{
text: '保存',
handler:function(){
if(simpleForm.form.isValid()){
this.disabled=true;
simpleForm.form.doAction('submit',{
url:'test.asp',
method:'post',
params:'',
success:function(form,action){
Ext.Msg.alert('操作',action.result.data); this.disabled=false;
},
failure:function(){
Ext.Msg.alert('操作','保存p|Q?);
this.disabled=false;
}
});
}
}
},{
text: '取消',
handler:function(){simpleForm.form.reset();}
}]

在formpanelcMQform属性指向的是formpanle里的basicform对象Q我们可通过formpanle.form来用该 basicform对象。在被例子,我们已经formpanel对象赋值给了simpleFormq个变量Q所以我们可以通过 simpleForm.form讉K面板里的basicform对象?/p>

在buttons里定义的按钮默认是Ext.ButtonQ所以按钮的属性定义可以查看Ext.Button的API。在q里两个按钮都没用到其它属性,只是讄了显C文本(textQ和单击事g?/p>

保存按钮要做的就是先做basicform的客L验证QsimpleForm.form.isValid()Q,验证通过了则讄该按钮状态ؓ disableQ防?ơ提交。然后调用simpleForm.form.doActionҎ提交数据。doActionҎ的第一个参?“submit”的意思是表示执行的是提交操作Q提交的后台面是test.aspQurl:'test.asp'Q,提交方式?postQmethod:'post'Q,没有其它提交参数Qparams:''Q,提交成功后执行success定义的函敎ͼ本例只是昄一个保存成功信息?strong>后台q回的数据格式是需要我们注意的Q一定要json格式Q而且必须包含“success:true”Q不然不会执行success定义的函数?/strong>success 定义的函数返回两个参敎ͼW一是form本nQ第二个是ajaxq回的响应结果,在action.resultq个json数组了保存了后台q回的数据。例如本例后台返回的jsonl构?#8220;{success:true,data:~~~}”Q其中data部分我将提交的数据将字段名和数据l合成一个字W串。在success函数中,我通过“Ext.Msg.alert('操作',action.result.data);”data数据昄出来。我们还定义failure函数Q就是网l通讯存在问题的时候将昄错误信息?/p>

取消按钮是单的reset一下form的控件?/p>

如果想form按以前的老办法提交,可以在formpanel的定义中加入一下设|:

 onSubmit: Ext.emptyFn,
submit: function() { this.getEl().dom.submit();}
W一个设|的目的是取消formpanel的默认提交函数。第二就是设|新的提交方式ؓ旧方式提交?/p>



]]>引用 Ext.Panel面板 http://www.aygfsteel.com/liuyz2006/articles/386913.html阿?/dc:creator>阿?/author>Mon, 03 Sep 2012 15:15:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/386913.htmlhttp://www.aygfsteel.com/liuyz2006/comments/386913.htmlhttp://www.aygfsteel.com/liuyz2006/articles/386913.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/386913.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/386913.html

引用 Ext.Panel面板  

 


使用qDelphi、Visual Basic或Java Swing{开发语a的读者对面板QPanelQ一定非常熟悉,我们可以在面杉K意地排版布局Q它像是一副骨架撑起了整个用户界面Q在ExtJS中面板同栯v着面骨架的作用,所以学习面板是学习ExtJS面布局的基和v炏V?ExtJS面板从用方式上来说更接q于Java Swing中的面板Q通过为其指定不同的布局方式或者进行面板嵌套达到复杂布局的目的,因此布局方式是否丰富Q能否进行嵌套,是衡量ExtJS布局灉|性的重要指标。ExtJS面板共支?0U不同风格的布局样式Qƈ且允许无限制的进行嵌套,q就l我们创造了一个尽情发挥的强大舞台?nbsp;

一、认识Ext.Panel

    Ext.Panel扩展自Ext.ContainerQ是各种lg的容器也是基c,可以扩展出功能更加强大的面板。作为标准的面板lg主要包括如下5部分Q底部工hQbottom toolbarsQ、顶部工hQtop toolbarsQ、面板头部(headerQ、面板底部(footerQ和面板体(bodyQ,下面是一个标准面板的CZQ可以帮助读者更清晰的认识面板组件?nbsp;
    代码5-1QExt.PanelCZ
    <script type="text/javascript">
Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  new Ext.Panel({
   title:'面板头部QheaderQ?,
   tbar : ['端工具?top toolbars)'],
   bbar : ['底端工具?bottom toolbars)'],
   height:200,
   width:300,
   frame:true,
   applyTo :'panel',
   bodyStyle:'background-color:#FFFFFF',
   html:'<div>面板体(bodyQ?lt;/div>',
   tools : [//讄面板头部功能?
    {id:'toggle'},
    {id:'close'},
    {id:'maximize'}
   ],
   buttons:[
    new Ext.Button({
     text:'面板底部QfooterQ?
    })
   ]
  })
 });
  </script>
    代码5-1演示了标准面板的创徏方式Q从?-1中可以看C个标准面板所h的全部组成部分,q?部分不但位置不同功能也不相同,它们分别有自己存在的价|读者可以根据业务需要选择使用其中合适的部分构成自己需要的面。效果如?-1所C?br />Ext.Panel面板 - ht_19820316 - ht_19820316的博? src=

二、Ext.Panel 的主要功?/strong>
上节介绍了ExtJS面板的主要表现Ş式,接下来将介绍面板lg的主要配|项及常用方法,q些配置及Ҏ在后面的示例中用到Q可以把q部分内容作为后l章节的铺垫Q进行快速的览QExt.Panel主要配置目如表5-1所C?


?-1  Ext.Panel主要配置目表表

 配置?/p>

 参数cd  说明
 animCollapse  Boolean  讄面板折叠或展开时是否显C动L果,如果 Ext.Fx cd用则默认
为trueQ否则ؓfasle?/td>
applyTo Mixed 一个页面上已经存在的元素或元素idQ组件将会追加到该元素的后面Q而不是将其作为新lg的容器?/font>
autoDestroy Boolean 讄是否自动销毁从容器中移除的lgQ默认ؓtrueQ否则要手工销?/font>
autoHeight Boolean 是否使用自动高度Q?/font>true则用自动高度,false则用固定高度,默认?font face="TimesNewRomanPSMT">false
autoLoad Object/String/
Function
讄面板自动加蝲?/font>url地址。如果不?/font>null则面板会试加蝲?/font>url
q立d面板中进行渲染。这个连接将变成面板?/font>
body元素Q所以可以根据需要在M时候刷新面板内?/font>
autoScroll Boolean 讄是否自动昄滚动条,true则设|面板的body元素样式为overflow:'auto'Q内Ҏ出时会自动显C滚动条Q?/font>false则不昄滚动条对溢出的内容进行截断。默认ؓfalse
autoShow Boolean 讄是否U除lg的隐藏样式(例如'x-hidden' or 'x-hide-display'Q,如果?font face="TimesNewRomanPSMT">true则在渲染时移除它们,默认?/font>false
autoWidth Boolean 是否使用自动宽度Q?/font>true动宽度,false为固定宽度,默认?/font>false
baseCls String 应用于面板元素的基本样式c,默认?/font>'x-panel'
bbar Object/Array 讄面板的底端工hQ可以是Ext.Toolbar对象、工h配置对象或button配置对象的数l?/font>
bodyBorder Boolean 讄是否昄面板体(bodyQ的内部ҎQ?/font>true则显C,false则隐藏,默认?font face="TimesNewRomanPSMT">true。ƈ且该只?/font>border = true时生?/font>
bodyStyle String/Object/
Function
应用于面板体Q?/font>bodyQ的自定义样式。默认ؓnull
border Boolean q是是否昄面板体(bodyQ的ҎQ?/font>true则显C,false则隐藏,默认?font face="TimesNewRomanPSMT">true。默认边框宽度ؓ2px
buttonAlign String 讄面板底部Q?/font>footerQ中按钮的对齐方式,有效值包括:'right', 'left' ?center'Q默认ؓ'right' 
buttons Array 加入到面板底部(footerQ中按钮配置对象的数l?/font>
collapseFirst Boolean 讄渲染展开或收~按钮的序?/font>true则在其它按钮渲染前先渲染展开或收~按钮,false则最后渲染,默认?/font>true。该配置决定了展开或收~按钮的位置?/font>
collapsed Boolean 讄面板在第一ơ渲染时是否处于收羃状态,true则收~,false则展开Q默认ؓfalse
collapsible Boolean 讄是否允许面板q行展开和收~,true则允许进行展开和收~,q在面板头部昄伸羃按钮。默认ؓfalse
contentEl String 讄面板的内容元素,可以是页面元素的id或已存在?/font>HTML节点
defaultType String 面板中元素的默认cdQ默认ؓ'panel'
defaults Object 应用到面板容器中所有元素的配置对象Q?例如Q?/font> defaults: {bodyStyle:'padding:15px'}
floating Boolean 讄面板是否可以动Q?/font>true则允许,默认?/font>false。注意,讄floating?font face="TimesNewRomanPSMT">true会导致面板显C在负偏Uȝ位置Q从而面板不可见Q因为Q动状态下面板是采用绝对定位的Q位|必d渲染之后q行明确的设|(例如myPanel.setPosition(100,100);Q?/font>.QQ动面板也需要有固定的宽?/font>
footer Boolean 讄是否创徏面板底部Q?/font>footerQ元素,true则创建,false则蟩q?/font>footer元素的创建,如果一个或多个按钮被加入到footer中,?/font>footer的设|会被忽略,而直接创?font face="TimesNewRomanPSMT">footer元素

frame Boolean 讄是否渲染面板Q?/font>true则渲染面板ؓ自定义的圆角ҎQ?/font>false则渲染ؓ1px的直角边?/font>
header Boolean 讄是否创徏面板头部Q?/font>headerQ元素,true则创建,false则蟩q?/font>header元素的创建,如果提供?font face="TimesNewRomanPSMT">title但没有设|?/font>header?/font>header会被自动创徏。如果提供了title但明设|?/font>header?/font>false?/font>header不会被创?/font>
headerAsText Boolean 讄是否在面板的header中显C?/font>titleQ?/font>true则显C,默认?/font>true
height Number 面板高度Q默认ؓauto
hideBorders Boolean true则隐藏面板容器中所有组件的ҎQ?/font>false则根据组件的具体配置q行昄
hideCollapseTool Boolean 讄?/font>collapsible?/font>trueӞ是否昄展开或收~按?/font>
html String/Object 讄面板Q?/font>bodyQ元素的内容?/font>HTML片段?/font>DomHelper生成的内宏V?/font>
items Mixed 单独一个子lg或子lg的数l?/font>
layout String 面板的布局cdQ默?/font>Ext.layout.ContainerLayout布局Q被选布局的配|项通过layoutConfigq行讄
layoutConfig Object q个配置对象包含被选布局的配|项Q针ҎU布局的配|项需要查看相应的布局c说?font face="TimesNewRomanPSMT">
maskDisabled Boolean 讄当面板不能用时是否遮罩面板Q?/font>true则遮|,默认?/font>true
shadow Boolean/String 讄是否在面板后面显C阴影,true则显C,或通过字符串指定阴q昄模式Q有效值包括:sides?/font>frame?/font>dropQ默认ؓ'sides'。该只在floating ?/font> true时生?/font>
shadowOffset Number 讄面板阴媄的偏U量Q以像素为单位,默认?/font>4。该只?/font>floating ?/font>true时生?/font>
tbar Object/Array 讄面板的顶端工hQ可以是Ext.Toolbar对象、工h配置对象或button配置对象的数l。注意,面板渲染后只能通过getTopToolbarҎ讉K该工h
title String 昄在面板头部的标题信息'
titleCollapse Boolean 讄是否允许通过点击面板头部q行展开和收~操作,true则允许,默认?font face="TimesNewRomanPSMT">false
tools Array 工具按钮配置对象的数l,q些按钮会被d到面板头部功能区Q在?font face="TimesNewRomanPSMT">5-2中会有详l的说明
width Number 面板宽度Q默认ؓauto

    Tools 配置主要用来设|面板头部功能区所要显C的各类按钮Q每个按钮的配置对象可能包含的配|项在表5-2中说明,tools配置id与按钮图标对应关pd?-3所C?/p>

?-2  tools配置Ҏl表

配置?/font> 参数cd 说明
id String 必选项Q可能值及效果见表5.3
handler Function 点击按钮后触发的处理函数Q参数包括: event : Ext.EventObject?/font>toolEl : Ext.Element?/font>Panel : Ext.Panel
scope Object 处理函数的执行范?/font>
qtip String/Object 为按钮指定提CZ息,可以是字W串或配|对?/font>
hidden Boolean 讄初次渲染Ӟ是否隐藏
on Object 为按钮配|事件监听器?/font>

?-3  tools配置id与按钮图标对应关p表
Ext.Panel面板 - ht_19820316 - ht_19820316的博? src=

三、用Ext.Panel

    本节主要介绍常用的面板用方法,q结合示例介l?.1.2节中常用配置的使用及效果,以读者有一个Ş象的认识。对于面板最重要的功能和作用是在其中显C各U不同来源的内容Q分?个示例分别讲?U不同的方式为面板提供显C内容,它们分别是: 
    使用autoLoad配置ؓ面板加蝲q程面?nbsp;
    使用contentEl配置ؓ面板加蝲本地资源?nbsp;
    使用html配置自定义面板内容?nbsp;
    使用items配置在面板中添加组件?
    q?U方式可以灵zȝ为面板提供各U需要显C的内容Q掌握它们是掌握面板使用方式的基Q在接下来的CZ中会逐一看到它们的用法和效果?

1.  使用autoLoad配置ؓ面板加蝲q程面

    在本例中创徏一个面板用于加载远E页面,CZ中主要用了 autoLoad 配置设|要加蝲的远E页面url地址Q同时展CZ面板折叠和滚动条的效果,L下面的示例代码?
    代码5-2Q用autoLoad配置加载远E页面示?
  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   title:'面板加蝲q程面',
   height:150,//讄面板的高?
   width:250,//讄面板的宽?
   frame:true,//渲染面板
   autoScroll :true,//自动昄滚动?
   collapsible : true,//允许展开和收~?
   applyTo :'panel',
   autoLoad :'page1.html',//自动加蝲面板体的默认q接
   bodyStyle:'background-color:#FFFFFF'//讄面板体的背景?
  })
 });
  </script>
  <div id='panel'>
    代码 5-2 演示了设|面板的 autoLoad 配置加载指定页面的方式Q从下面的截图中可以看到Q当面板初始化时自动加蝲了指定的page1.html面Qƈ且在面内容出面板大小时自动显C滚动条。效果如?-2~5-4所C?br />Ext.Panel面板 - ht_19820316 - ht_19820316的博? src=

2.  使用contentEl配置ؓ面板加蝲本地资源

    上例介绍了面板加载远E页面的ҎQ它是非常实用的方式Q但是在有些情况下ƈ不需要读取一份远E的面Q而只是将本页面中的已有部分展C在面板中,q就用到了contentEl配置,它的作用是指定在面板中所要显C的本地资源idQ看下面的示例代码?
    代码5-3Q用contentEl配置加载本地资源示?
  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   title:'面板加蝲本地资源',
   height:150,                //讄面板的高?
   width:250,                //讄面板的宽?
   frame:true,               //渲染面板
   collapsible : true,          //允许展开和收~?
   autoScroll : true,           //自动昄滚动?
   autoHeight  : false,         //使用固定高度
   //autoHeight  : true,        //使用自动高度
   applyTo :'panel',
   contentEl :'localElement',    //加蝲本地资源
   bodyStyle:'background-color:#FFFFFF'       //讄面板体的背景?
  })
 });
  </script>
  <table border=1 id='localElement'>
  <tr><th colspan=2>本地资源---员工列表</th></tr>
  <tr>
   <th width = 60>序号</th><th width = 80>姓名</th>
  <tr>
  <tr><td>1</td><td>张三</td></tr>
  <tr><td>2</td><td>李四</td></tr>
  <tr><td>3</td><td>王五</td></tr>
  <tr><td>4</td><td>赵六</td></tr>
  <tr><td>5</td><td>陈七</td></tr>
  <tr><td>6</td><td>杨八</td></tr>
  <tr><td>7</td><td>刘九</td></tr>
  </table>

    在代?-3中可以看到员工列表ƈ没有通过hq程面得到Q而是直接本面中已存在的一份table 表格作ؓ内容展示在了面板当中Q这U方式省略了q程面的读取过E,昄速度快,适合于展C简单的本地资源。同时在CZ中还展示了自动高度与固定高度的不同效果,自动高度会根据展C内容的实际高度自动调整面板高度Q所以在面板内部q没有出现滚动条。运行效果如?-5?-6所C?br />Ext.Panel面板 - ht_19820316 - ht_19820316的博? src=

3.  使用html配置自定义面板内容

    在上?个示例中Q不是q程面q是本地资源加蝲的都是已存在的页面内宏V接下来介绍自定义面板内容的实现方式Q可以自q写HTML代码来定义自己需要的展示效果Q示例用面板的html配置,通过它就可以实现自定义面板内容的目的Q看下面的示例?
    代码5-4Q用html配置自定义面板内容CZ
<script type="text/javascript">
Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var htmlArray = [
      '<table border=1>',
       '<tr><td colspan=2>员工列表</td></tr>',
       '<tr><th width = 60>序号</th><th width = 80>姓名</th><tr>',
       '<tr><td>1</td><td>张三</td></tr>',
       '<tr><td>2</td><td>李四</td></tr>',
       '<tr><td>3</td><td>王五</td></tr>',
       '<tr><td>4</td><td>赵六</td></tr>',
       '<tr><td>5</td><td>陈七</td></tr>',
       '<tr><td>6</td><td>杨八</td></tr>',
       '<tr><td>7</td><td>刘九</td></tr>',
      '</table>'
       ];
  var panel = new Ext.Panel({
   title:'使用html配置自定义面板内容',
   height:150,             //讄面板的高?
   width:250,             //讄面板的宽?
   frame:true,             //渲染面板
   collapsible : true,        //允许展开和收~?
   autoScroll : true,        //自动昄滚动?
   applyTo :'panel',
   html: htmlArray.join(''),
   bodyStyle:'background-color:#FFFFFF'      //讄面板体的背景?
  })
 });
</script>
    ?-7与图5-5中展C的面效果完全相同Q但是它们却使用了完全不同的产生方式Qhtml 配置给了我们动态组l面板内容的途径Q在代码 5-7 中首先创Z字符串数lhtmlArrayQ然后通过调用数组?join Ҏ数l内容连接ؓ整体供程序用,读者也可以使用“+”q行字符串连接,q两U连接方式对E序的执行ƈ没有M影响?br />Ext.Panel面板 - ht_19820316 - ht_19820316的博? src=

4.  使用items配置在面板中添加组?br />
    在学习完前面3Uؓ面板d内容的方式之后,再介l通过items配置ؓ面板dlg的方式,q也是最重要和常用的面板功能之一。通过使用items配置不但可以向面板中添加组Ӟq可以实现面板的多层嵌套Q由于items既可以接受单个对象也可以接受数组为参敎ͼ所以将?个示例分别讲解?nbsp;
    向面板中d单一lg
    在代?-5中将创徏一个只包含日期选择lg的面ѝ?
代码5-5Q用items配置Ҏ加单一lgCZ
  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   header :true,
   title:'日历',
   frame:true,            //渲染面板
   collapsible : true,       //允许展开和收~?
   autoHeight : true,       //自动高度
   width : 189,           //固定宽度
   applyTo :'panel',
   items: new Ext.DatePicker()    //向面板中d一个日期组?
  })
 });
  </script>
    代码5-5演示了向面板d单一lg的方法,其中items配置Ҏ向面板中dlg的主要方式,在代?-6中会演示向面板中d多个lg的方法。运行效果如?-8所C?/p>

Ext.Panel面板 - ht_19820316 - ht_19820316的博? src=

?-8  通过items配置向面板中添加一个组?br />
向面板中d多个lg
    可以向面板中d普通组Ӟ也可以向面板中添加子面板Q因为面板(Ext.PanelQ本w也是组Ӟ因此面板本n可以通过items配置Ҏ加到爉板中Q这样就形成了多层面板嵌套的效果Q这也是q行复杂面布局的基。下面是向面板添加多个组件的单示例?
    代码5-6Q用items配置Ҏ加多个组件示?
  <script type="text/javascript">
 Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL ='../../extjs2.0/resources/images/default/s.gif';
  var panel = new Ext.Panel({
   header :true,
   title:'使用itemsq行面板嵌套',
   frame:true,               //渲染面板
   collapsible : true,          //允许展开和收~?
   height : 200,
   width : 250,
   applyTo :'panel',
   defaults : {             //讄默认属?
    bodyStyle:'background-color:#FFFFFF',      //讄面板体的背景?
    height : 80,             //子面杉K度ؓ80
    collapsible : true,        //允许展开和收~?
    autoScroll : true         //自动昄滚动?
   },
   items: [
    new Ext.Panel({
     title : '嵌套面板一',
     contentEl : 'localElement'       //加蝲本地资源
    }),
    new Ext.Panel({
     title : '嵌套面板?,
     autoLoad : 'page1.html'         //加蝲q程面
    })
   ]
  })
 });
  </script>
 <table border=1 id='localElement'>
  <tr><th colspan=2>本地资源---员工列表</th></tr>
  <tr>
   <th width = 60>序号</th><th width = 80>姓名</th>
  <tr>
  <tr><td>1</td><td>张三</td></tr>
  <tr><td>2</td><td>李四</td></tr>
  <tr><td>3</td><td>王五</td></tr>
 </table>
    代码 5-6 演示了向面板中添加多个组件的ҎQitems 配置Ҏ受组件数lؓ参数依次
组件添加到面板当中。效果如?-9?-10所C?br />Ext.Panel面板 - ht_19820316 - ht_19820316的博? src=



]]>javascript prototype分析http://www.aygfsteel.com/liuyz2006/articles/385789.html阿?/dc:creator>阿?/author>Sun, 19 Aug 2012 15:04:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/385789.htmlhttp://www.aygfsteel.com/liuyz2006/comments/385789.htmlhttp://www.aygfsteel.com/liuyz2006/articles/385789.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/385789.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/385789.html

javascript prototype分析

对于Javascript的初学者来_Prototype是个蛮高q话题Q其实ƈ不尽然?

  我说不尽Ӟ意思是说理解Prototype的一般用法很单。但是真正能做到融会贯通理解Prototype实是g很难的事情?/p>

  今天我就从Prototype的基本开始讲。上文中我讲了原型模式。其实在Javascript中原型也是这个意思?Javascript中对象的原型属性的解释是:q回对象cd原型的引用。这是一个晕人的解释。其实就是指定了一个需要复制的对象?/p>

  文字再多也不如代码,上代码,说最单的QQ何类都承自Objectc:

function A()
{

//todo something

}
A.prototype=new Object();

  其实q样q当于Object对象是A的一个原型,q样q当于了把Object对象的属性和Ҏ复制CA上,和原型模式的_N一样吧Q?/p>

  好,大概了解了prototype的基本用法,我们来看看原型究竟有什么用处?/p>

  最单的用法Q动态扩展类的方法和属性?/p>

de>function People()
{
   this.Jump=function(){
                                alert("I can jump");
                                           }
}

  现在要扩充方法:

People.prototype.Run=function(){
                                    alert("I can run,too");
                                                    }

  好,试下:

var p=new People();
p.Jump();
p.Run();

cript玩{Prototype - Gabriel - Software Engineer" height=153 alt="Javascript玩{Prototype(?" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/9f99f91faaa8f027f724e4a1.jpg" width=231>

cript玩{Prototype - Gabriel - Software Engineer" height=138 alt="Javascript玩{Prototype(?" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/2bd66063e085f0240d33faa1.jpg" width=217>

  接下来,带讲一下Javascript的方法种cR我个hJavascript的方法分ZU:

  <1>cL?/p>

  <2>对象Ҏ

  <3>原型Ҏ

  先看代码Q后讲区别:

function People(name)
{
this.name=name;
//对象Ҏ
this.Introduce=function(){
alert("My name is "+this.name);
}
}
//cL?br />People.Run=function(){
alert("I can run");
}
//原型Ҏ
People.prototype.IntroduceChinese=function(){
alert(" 我的名字?+this.name);
}

  试下:

var p1=new People("Windking");
p1.Introduce();
People.Run();
p1.IntroduceChinese();

cript玩{Prototype - Gabriel - Software Engineer" height=124 alt="Javascript玩{Prototype(?" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/63fb606014921c00eaf8f8a1.jpg" width=203>

cript玩{Prototype - Gabriel - Software Engineer" height=140 alt="Javascript玩{Prototype(?" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/99ec8c44f1598108500ffea1.jpg" width=209>

cript玩{Prototype - Gabriel - Software Engineer" height=136 alt="Javascript玩{Prototype(?" src="http://hiphotos.baidu.com/yafengyouxia/pic/item/7e27114c4dae42bdd62afca1.jpg" width=216>

  ȝ下:

  名称

  位置

  格式

  cL?/p>

  cd

  cd.Ҏ?/p>

  对象Ҏ

  cd

  this.Ҏ?/p>

  原型Ҏ

  cd

  cd.prototype.Ҏ?/p>

  我们用C#来做cd来讲解这三个ҎQ?/p>

  cL法其实就是我们讲的静态方法:

       如public static void Run(){}

  而对象方法其实就是实例方法?/p>

        public void Introduce(){}

  而原型方法有所不同Q由于C#中不允许动态ؓ对象增加ҎQ因此在C#中ƈ不存在原型方法。原型方法处于C#的静态方法与实例Ҏ之间Q通过对象调用Q但是存储的内存形式却类g静态方法,也就是所有实例对象共享同一副本?/p>

  (ps:量方法定义ؓ原型ҎQ原型方法避免了每次调用构造函数时对属性或Ҏ的构造,因此比较节省I间和时?

  p1.IntroduceChinese();创徏对象?/p>

  q记得我在上一文章里讲的复制么Qؓ什么大安喜欢扚w生Q效率是最主要因素。浅复制也一P我们Z么要复Ӟ因ؓ效率高。作为原型模式的 Javascript应用Qprototype也承担着q样的重仅R用prototype来创建对象,要比其他方式快得多?/p>

  看代码例子:

function People(name,age)
{
        this.name=name;
        this.age=age;
}
var p1=new People("Xuan",22);
var girls=[ ];
var GirlPrototype=function(){};
GirlPrototype.prototype=p1;
for(var i=0;i<100000;i++)
{
        girls[i]=new GirlPrototype();
}

  玩{l承Q?/p>

  Prototype最大的应用其实q是在于玩{l承Q这个在此不讨论Q请参加我的另一文章:《Javascript玩{l承Q二Q》?/p>

  好,基本的应用说完,下面我来说一下prototype的天使和鬼两面?/p>

  说prototype是天使,是因Z上的几点应用Q让Javascript增加了很大的灉|性,其原型l承Q更是Javascript最多的l承方式?/p>

  说他是魔|则是因ؓ下面几方面:

  原型l承的缺陗请参见《Javascript玩{l承Q二Q》?/p>

  原型其实相当于原型模式中的浅复制Q因此也会造成牵一发而动全n的效果?/p>  q于灉|。ؓ什么过于灵zdQ其实这Ҏ针对W一Ҏ说的Q能够动态地d属性和Ҏ固然是增加了灉|性。可是我们讨ZU情况,100个h同时来开发一个Javascript的项目,很多没经验的人爱上了玩{prototypeQ一个h往q个c里加一个方法,q面向对象么Q?



]]>JavaScript prototype整理Q网上的三种理解Q?http://www.aygfsteel.com/liuyz2006/articles/385784.html阿?/dc:creator>阿?/author>Sun, 19 Aug 2012 13:09:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/385784.htmlhttp://www.aygfsteel.com/liuyz2006/comments/385784.htmlhttp://www.aygfsteel.com/liuyz2006/articles/385784.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/385784.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/385784.html

JavaScript prototype整理Q网上的三种理解Q?/a>

prototype属性,只有function对象中才h的显式属性;

|上三种理解Q?
            1Q通过构造函数创建的普通对象,通过其constructor属性引用它的构造函数对象,从而间接引用(拥有Q了构造对象中的prototype对象Q?

如图Q?img class="magplus" title="点击查看原始大小囄" height="400" src="http://dl.iteye.com/upload/picture/pic/47469/bcc49472-57dd-34c6-8d3a-f7667bcbe080.jpg" width="700" alt="" />

此观点的文章Q?nbsp;  参看 jimichan的文章:详解javascriptcȝ承机制的原理 中的Q?“Q说成间接的是因为每个object都有一?constructor 属性指向它的构造函敎ͼ?#8221;
非常感谢在此问题上,作者对我的回信Q如有冒犯,敬请原谅Q?/span>

            2Q构造函数创建对象时Qcopy prototype中的属性和代码l所创徏的对象。从而创徏的对象拥有了prototype中的所有功能和属性;

如图Q?img class="magplus" title="点击查看原始大小囄" height="572" src="http://dl.iteye.com/upload/picture/pic/47487/ea864896-ea56-3498-9c7b-33b12af23899.jpg" width="700" alt="" />

此观点的文章Q?nbsp;  参看 yiding_he的文章:领悟 JavaScript 中的面向对象 中的Q?nbsp; “ ?JavaScript 中,?new 关键字创建对象是执行了下面三个步骤的Q?

   1. 创徏一个新的普通对象;
   2. 方法对象的 prototype 属性的所有属性复制到新的普通对象中厅R?
   3. 以新的普通对象作Z下文来执行方法对象?#8221;

此观点在回脓中被 xieye反对

            3Q构造函数在创徏对象Ӟ把构造函C的prototype引用赋给创徏的普通对象;也就是说由构造函数创建的对象Q都有一个指针指向prototype对象Q?

如图Q?img class="magplus" title="点击查看原始大小囄" height="581" src="http://dl.iteye.com/upload/picture/pic/47489/b9f6b9fe-6f09-3179-aaee-d5876f10535d.jpg" width="700" alt="" />

此观点的文章Q?nbsp;  参看 李站的文章:悟透javascript中的" 我们已经知道Q用 var anObject = new aFunction() 形式创徏对象的过E实际上可以分ؓ三步Q第一步是建立一个新对象Q第二步该对象内置的原型对象设|ؓ构造函数prototype引用的那个原型对象;W三步就是将该对象作为this参数调用构造函敎ͼ完成成员讄{初始化工作。对象徏立之后,对象上的M讉K和操作都只与对象自n及其原型链上的那串对象有养I与构造函数再扯不上关pM"   以及  “语法甘露 中的Q上面代码的最后一句证明,新创建的对象的constructor属性返回的是Object函数。其实新建的对象自己及其原型里没有constructor属性,那返回的只是最层原型对象的构造函敎ͼ即Object?#8221;




lg所qͼҎ贴子Q?a target="_blank">领悟 JavaScript 中的面向对象 中作?afcn0的回?“其实q有补充,是如果构造函数返回objectcd,那new对象无效,prototype问题是楼主还不太了解prototypel承方式,__proto__属?以及isPrototypeOfҎ所?” 的提C,查阅了文章:javascript中的l承

Html代码  
  1. 此文中提刎ͼjane = new Engineer("Doe, Jane", ["navigator", "javascript"], "belau");   
  2.   
  3.   调用q句Ӟ都发生了什?   
  4.   
  5.   1  当js看见new操作W,它创Z个新的普通对?q且讄它的__proto__ 属性ؓEngineer.prototype?  
  6.   
  7.   2 new 操作W传递这个新的对象作为Engineer 构造器的this的倹{?  
  8.   
  9.   其实最主要做的事就是上面的两gQ剩下的都是很简单的函数调用.  
此文中提刎ͼjane = new Engineer("Doe, Jane", ["navigator", "javascript"], "belau");

  调用q句Ӟ都发生了什?

  1  当js看见new操作W,它创Z个新的普通对?q且讄它的__proto__ 属性ؓEngineer.prototype?

  2 new 操作W传递这个新的对象作为Engineer 构造器的this的倹{?

  其实最主要做的事就是上面的两gQ剩下的都是很简单的函数调用.



Ҏ上文的提CZ了简单测试:
Javascript代码  
  1. function person(name,b){   
  2.     this.name=name;   
  3. }   
  4.   
  5. person.prototype.sayHello=function(a){   
  6.     //alert("hello,i am "+this.name);   
  7.     alert(this==a);   
  8.     }   
  9.   
  10.   
  11. function employee(name, salary)   
  12. {   
  13.     person.call(this, name);    //调用上层构造函?  
  14.     this.salary = salary;       //扩展的成?  
  15. };   
  16.   
  17. var p=new person("yangsp",p);   
  18. //p.sayHello(p);   
  19. //alert(p.constructor);   
  20.   
  21. //下面两句验证了普通对象中有_proto_属性,且引用的是prototype对象Q(在ff下调试,ie下不可)Q?  
  22. alert(p.__proto__==person);   
  23. alert(p.__proto__==person.prototype))   
  24.   
  25. //alert("p有prototype属性吗? "+p.prototype);    //表明普通对象中没有prototype属?                               
function person(name,b){
	this.name=name;
}

person.prototype.sayHello=function(a){
	//alert("hello,i am "+this.name);
	alert(this==a);
	}


function employee(name, salary)
{
    person.call(this, name);    //调用上层构造函?
    this.salary = salary;       //扩展的成?
};

var p=new person("yangsp",p);
//p.sayHello(p);
//alert(p.constructor);

//下面两句验证了普通对象中有_proto_属性,且引用的是prototype对象Q(在ff下调试,ie下不可)Q?
alert(p.__proto__==person);
alert(p.__proto__==person.prototype))

//alert("p有prototype属性吗? "+p.prototype);	//表明普通对象中没有prototype属?								




ȝQ?
Html代码  
  1. 比较赞同W三U理解;   
  2.       卻Iprototype是function对象中专有的属性?  
  3.           _proto_是普通对象的隐式属性,在new的时候,会指向prototype所指的对象Q?  
  4.           普通对象中的constructor属性指向构造函敎ͼ因此一个用构造函数创建的对象可能有两U方式关联到prototype.但承应该是Ҏ_proto_兌到prototype属性;  
比较赞同W三U理解;
      卻Iprototype是function对象中专有的属性?
          _proto_是普通对象的隐式属性,在new的时候,会指向prototype所指的对象Q?
          普通对象中的constructor属性指向构造函敎ͼ因此一个用构造函数创建的对象可能有两U方式关联到prototype.但承应该是Ҏ_proto_兌到prototype属性;


另外Q?a target="_blank">ecma-262中提刎ͼevery object created by that constructor has an implicit reference to the prototype (called the object's prototype) associated with its constructor 以及其图C;不敢肯定它的implicit reference间接q是隐式链接Q?




]]>encodeURIComponent的?/title><link>http://www.aygfsteel.com/liuyz2006/articles/385742.html</link><dc:creator>阿?/dc:creator><author>阿?/author><pubDate>Sat, 18 Aug 2012 12:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/liuyz2006/articles/385742.html</guid><wfw:comment>http://www.aygfsteel.com/liuyz2006/comments/385742.html</wfw:comment><comments>http://www.aygfsteel.com/liuyz2006/articles/385742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/liuyz2006/comments/commentRss/385742.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/liuyz2006/services/trackbacks/385742.html</trackback:ping><description><![CDATA[<div><p><strong><span style="font-size: medium; font-family: arial,helvetica,sans-serif;">encodeURIComponent的?/span> </strong></p> <p><strong><span style="font-size: medium; font-family: arial,helvetica,sans-serif"><br /></span></strong></p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">在说明encodeURIComponent前先介绍?/span> <strong>escape,encodeURI,encodeURIComponent</strong> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">q三个,主要是从其他地方转过来的Qhttp://blog.csdn.net/fengzi_shen/archive/2009/04/01/4041488.aspxQ?/span> </p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">jsҎ字进行编码涉?个函敎ͼescape,encodeURI,encodeURIComponentQ相?个解码函敎ͼunescape,decodeURI,decodeURIComponent<br /><br />1?nbsp;  传递参数时需要用encodeURIComponentQ这L合的url才不会被#{特D字W截断?nbsp;                           <br /><br />例如Q?lt;script language="javascript">document.write('<a );</script><br /><br />2?nbsp;  q行url跌{时可以整体用encodeURI<br /><br />例如QLocation.href=encodeURI("http://cang.baidu.com/do/s?word=癑ֺ&ct=21");<br /><br />3?nbsp;  js使用数据时可以用escape<br /><br />[Huoho.Com~辑]<br /><br />例如Q搜藏中historyU录?br /><br />4?nbsp;  escape?-255以外的unicodeD行编码时输出%u****格式Q其它情况下escapeQencodeURIQencodeURIComponent~码l果相同?br /><br /><br />最多用的应ؓencodeURIComponentQ它是将中文、韩文等Ҏ字符转换成utf-8格式的url~码Q所以如果给后台传递参数需要用encodeURIComponent旉要后台解码对utf-8支持Qform中的~码方式和当前页面编码方式相同)<br /><br />escape不编码字W有69个:*Q?Q?Q?Q?Q@Q_Q?-9Qa-zQA-Z<br /><br />encodeURI不编码字W有82个:!Q?Q?Q?amp;Q?Q?Q?Q?Q?Q?Q?Q?Q?Q?Q?Q?Q?Q@Q_Q~Q?-9Qa-zQA-Z<br /><br />encodeURIComponent不编码字W有71个:!Q? 'Q?Q?Q?Q?Q?Q_Q~Q?-9Qa-zQA-Z<br /><br /><br /><strong>现在说下我在传递非英文字符串的处理Q?/strong> </span></p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif"><strong>    URLQ?/strong> addressgrp.action?oper=addgrp&groupname="+encodeURIComponent(groupsname)</span> </p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">   在action获取</span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">groupnameQ?/span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">getGroupname()</span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">Q时q没有进q编码{化,获取的信息ƈ不正,l过试发现需要进行一ơ编码{换:String grpname= new String(getGroupname().getBytes("ISO-8859-1"), "UTF-8");</span> </p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">在网上搜索相关的信息Q网上提供了另一U方法:在页面上q行两次~码操作Q然后在后台再进行一ơ解码,q是׃java后台在获取数据时已经q行了一ơ解码,可问题是q行一ơ解码后的数据ƈ不正,而如果在面中编码两ơ然后在后台q行一ơ解码就可以获取真确的数据。页面URLQ?/span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">addressgrp.action?oper=addgrp&groupname="+</span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">encodeURIComponentQ?/span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">encodeURIComponent(groupsname)Q?/span> </p> <p><span style="font-size: medium; font-family: arial,helvetica,sans-serif">后台获取数据Q?/span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">String grpname</span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">=java.net.URLDecoder.decode(</span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">getGroupname()</span> <span style="font-size: medium; font-family: arial,helvetica,sans-serif">,"UTF-8")</span></p></div><img src ="http://www.aygfsteel.com/liuyz2006/aggbug/385742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/liuyz2006/" target="_blank">阿?/a> 2012-08-18 20:49 <a href="http://www.aygfsteel.com/liuyz2006/articles/385742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>escape()、encodeURI()、encodeURIComponent()区别详解http://www.aygfsteel.com/liuyz2006/articles/385740.html阿?/dc:creator>阿?/author>Sat, 18 Aug 2012 12:47:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/385740.htmlhttp://www.aygfsteel.com/liuyz2006/comments/385740.htmlhttp://www.aygfsteel.com/liuyz2006/articles/385740.html#Feedback1http://www.aygfsteel.com/liuyz2006/comments/commentRss/385740.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/385740.html

escape()、encodeURI()、encodeURIComponent()区别详解

JavaScript中有三个可以对字W串~码的函敎ͼ分别是: escape,encodeURI,encodeURIComponentQ相?个解码函敎ͼunescape,decodeURI,decodeURIComponent ?

下面单介l一下它们的区别

1 escape()函数

定义和用?
escape() 函数可对字符串进行编码,q样可以在所有的计算Zd该字W串?

语法
escape(string)

参数  描述 
string  必需。要被{义或~码的字W串?nbsp;

q回?
已编码的 string 的副本。其中某些字W被替换成了十六q制的{义序列?

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对下面q些 ASCII 标点W号q行~码Q?- _ . ! ~ * ' ( ) 。其他所有的字符都会被{义序列替换?

 


2 encodeURI()函数
定义和用?
encodeURI() 函数可把字符串作?URI q行~码?

语法
encodeURI(URIstring)

参数  描述 
URIstring  必需。一个字W串Q含?URI 或其他要~码的文本?nbsp;

q回?
URIstring 的副本,其中的某些字W将被十六进制的转义序列q行替换?

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对q些 ASCII 标点W号q行~码Q?- _ . ! ~ * ' ( ) ?

该方法的目的是对 URI q行完整的编码,因此对以下在 URI 中具有特D含义的 ASCII 标点W号QencodeURI() 函数是不会进行{义的Q?/?:@&=+$,#

 


3 encodeURIComponent() 函数

定义和用?
encodeURIComponent() 函数可把字符串作?URI lgq行~码?

语法
encodeURIComponent(URIstring)

参数  描述 
URIstring  必需。一个字W串Q含?URI lg或其他要~码的文本?nbsp;

q回?
URIstring 的副本,其中的某些字W将被十六进制的转义序列q行替换?

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对q些 ASCII 标点W号q行~码Q?- _ . ! ~ * ' ( ) ?

其他字符Q比?Q?/?:@&=+$,# q些用于分隔 URI lg的标点符PQ都是由一个或多个十六q制的{义序列替换的?

提示和注?
提示Q请注意 encodeURIComponent() 函数 ?encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分Q比如协议、主机名、\径或查询字符Ԍ。因?encodeURIComponent() 函数{义用于分?URI 各个部分的标点符受?

 

4 ȝQ?/strong>

 通过对三个函数的分析Q我们可以知道:escape()除了 ASCII 字母、数字和特定的符号外Q对传进来的字符串全部进行{义编码,因此如果惛_URL~码Q最好不要用此Ҏ。而encodeURI() 用于~码整个URI,因ؓURI中的合法字符都不会被~码转换。encodeURIComponentҎ在编码单个URIComponentQ指h参数Q应当是最常用的,它可以讲参数中的中文、特D字W进行{义,而不会媄响整个URL?/p>

 

5 CZQ?/strong>

1 escape()

<script type="text/javascript">

document.write(escape("

document.write(escape("?!=()#%&"))

</script>输出Q?/p>

http%3A//www.w3school.com.cn

%3F%21%3D%28%29%23%25%26

2 encodeURI()

<script type="text/javascript">

document.write(encodeURI("

document.write(encodeURI("http://www.w3school.com.cn/My first/"))

document.write(encodeURI(",/?:@&=+$#"))

</script>输出Q?/p>

http://www.w3school.com.cn/

http://www.w3school.com.cn/My%20first/

,/?:@&=+$#

Ҏ个URLq行~码Q而URL的特定标识符不会被{码?/p>

3 encodeURIComponent()

?Q?/p>

<script type="text/javascript">

document.write(encodeURIComponent("

document.write("<br />")

document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))

document.write("<br />")

document.write(encodeURIComponent(",/?:@&=+$#"))

</script输出Q?/p>

http%3A%2F%2Fwww.w3school.com.cn
http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F
%2C%2F%3F%3A%40%26%3D%2B%24%23
?Q?lt;script language="javascript">document.write('

<a href="

对URL中的参数q行~码Q因为参C是一个URLQ如果不~码会媄响整个URL的蟩转?/p>



]]>
Extjs中的q代Ҏ http://www.aygfsteel.com/liuyz2006/articles/384808.html阿?/dc:creator>阿?/author>Sun, 05 Aug 2012 06:54:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/384808.htmlhttp://www.aygfsteel.com/liuyz2006/comments/384808.htmlhttp://www.aygfsteel.com/liuyz2006/articles/384808.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/384808.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/384808.html

Extjs中的q代Ҏ

分类Q?extjs 49人阅?/span> 评论(0) 收藏 举报

EXTJS 有很多的q代ҎQ例?你也许已知道的Ext.eachQ但q有另外一些不Zh知且很有用的Ҏ。首先,要回下Ext.each:

Ext.each

为每一个数l的成员应用同一个方法,它基本上是一个更方便的@环Ş?/p>

var people = ['Bill', 'Saul', 'Gaius'];

//using each to detect Cylons:
Ext.each(people, function (person, index)
{
    var cylon = (index + 1) % 2 == 0; //every second man is a toaster
    alert(person + (cylon ? ' is ' : ' is not ') + 'a fraking cylon');
});

//is the same as
for (var i = 0; i < people.length; i++)
{
    var person = people[i];
    var cylon = (index + 1) % 2 == 0; //every second man is a toaster

    alert(person + (cylon ? ' is ' : ' is not ') + 'a frakin cylon');
};

Ext.iterate

Ext.iterate ?Ext.each cM针对非数l对? 通常用在for-in 循环?
var ships = { 'Bill': 'Galactica', 'Laura': 'Colonial One' };

Ext.iterate(ships, function (key, value)
{
    alert(key + "'s ship is the " + value);
});

//is the same as
for (key in ships)
{
    var value = ships[key];
    alert(key + "'s ship is the " + value);
}

用Ext.iterate在数l上Q与Ext.each完全相同?nbsp;
each和iterateҎ都有W三个可选参数scope?nbsp;
另一个有用的技巧是你可以更方便的重用相同的Ҏ:

var myFunction = function (item, index)
{
    //does some clever thing
}

Ext.each(people, myFunction);
Ext.each(['another', 'array'], myFunction);

Ext.pluck

(4.0.0之后q时) Ext.pluck从对象数l捕L定的属?
var animals = [
  { name: 'Ed', species: 'Unknown' },
  { name: 'Bumble', species: 'Cat' },
  { name: 'Triumph', species: 'Insult Dog' }
];

Ext.pluck(animals, 'species'); //returns ['Unknown', 'Cat', 'Insult Dog']
Ext.pluck(animals, 'name'); //returns ['Ed', 'Bumble', 'Triumph']

此方法自4.0.0不徏议用,LExt.Array.pluck代替.

Ext.invoke

(4.0.0之后q时)数组中所有成员调用同一个方法,q返回结果,使用用上例animalsQ?/p>

var describeAnimal = function (animal)
{
    return String.format("{0} is a {1}", animal.name, animal.species);
}

var describedAnimals = Ext.invoke(animals, describeAnimal);
console.log(describedAnimals); // ['Ed is a Unknown', 'Bumble is a Cat', 'Triumph is a Insult Dog'];

Ext.invoke与Ruby的集合方法类|使得更容易{换数l,M增加的参数都可通过Ext.invoke传递?nbsp;
此方法自4.0.0不徏议用,4.Xpd版本后将被移除?/p>

Ext.Partition

Ext.Partition数l拆分成两部分?/p>

var trees = [
  { name: 'Oak', height: 20 },
  { name: 'Willow', height: 10 },
  { name: 'Cactus', height: 5 }
];

var isTall = function (tree) { return tree.height > 15 };

Ext.partition(trees, isTall);

//returns:
[
  [{ name: 'Oak', height: 20}],
  [{ name: 'Willow', height: 10 }, { name: 'Cactus', height: 5}]
]

此方法自4.0.0不徏议用,4.Xpd版本后将被移除?/p>

数学Ҏ

var numbers = [1, 2, 3, 4, 5];
Ext.min(numbers); //1
Ext.max(numbers); //5
Ext.sum(numbers); //15
Ext.mean(numbers); //3


]]>
jsp->jsonhttp://www.aygfsteel.com/liuyz2006/articles/384803.html阿?/dc:creator>阿?/author>Sun, 05 Aug 2012 04:26:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/384803.htmlhttp://www.aygfsteel.com/liuyz2006/comments/384803.htmlhttp://www.aygfsteel.com/liuyz2006/articles/384803.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/384803.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/384803.html一、不传URL
view plaincopy to clipboardprint?
var myData={ "Head":[
    { "UserName":"admin","Name":"李亚?,"Gender":"M","Password":"123456","Status":"0","Department":"技术部","Title":"E序?,"Email":" 0:00:00","ModifyUser":"1","ModifyTime":"2009-10-30 10:04:22"},
    { "UserName":"00001","Name":"李香?,"Gender":"F","Password":"123456","Status":"0","Department":"技术部","Title":"E序?,"Email":" 0:00:00","ModifyUser":"","ModifyTime":""}
    ]
}

var ds = new Ext.data.Store({
    //proxy: new Ext.data.MemoryProxy(myData),
    reader: new Ext.data.JsonReader({root: 'Head'},
    [{name:'UserName'},{name: 'Name'}, {name:'Gender'},{name:'Password'},{name:'Status'},{name:'Department'},{name:'Title'},{name:'Email'},{name:'OfficePhone'}])
});
ds.loadData(myData)

或?/p>

var ds = new Ext.data.Store({
    proxy: new Ext.data.MemoryProxy(myData),
    reader: new Ext.data.JsonReader({root: 'Head'},
    [{name:'UserName'},{name: 'Name'}, {name:'Gender'},{name:'Password'},{name:'Status'},{name:'Department'},{name:'Title'},{name:'Email'},{name:'OfficePhone'}])
});
//注意下面q句 切记
ds.load()都可?/p>

 

二、用URL
(1)JSON HTMLPage.htm面做数据源

{"Head":[{"appeId":"1","survId":"1","location":"","surveyDate":"2008-03-14","surveyTime":"12:19:47","inputUserId":"1","inputTime":"2008-03-14 12:21:51","modifyTime":"0000-00-00 00:00:00"},{"appeId":"2","survId":"32","location":"","surveyDate":"2008-03-14","surveyTime":"22:43:09","inputUserId":"32","inputTime":"2008-03-14 22:43:37","modifyTime":"0000-00-00 00:00:00"},{"appeId":"3","survId":"32","location":"","surveyDate":"2008-03-15","surveyTime":"07:59:33","inputUserId":"32","inputTime":"2008-03-15 08:00:44","modifyTime":"0000-00-00 00:00:00"},{"appeId":"4","survId":"1","location":"","surveyDate":"2008-03-15","surveyTime":"10:45:42","inputUserId":"1","inputTime":"2008-03-15 10:46:04","modifyTime":"0000-00-00 00:00:00"},{"appeId":"5","survId":"32","location":"","surveyDate":"2008-03-16","surveyTime":"08:04:49","inputUserId":"32","inputTime":"2008-03-16 08:05:26","modifyTime":"0000-00-00 00:00:00"},{"appeId":"6","survId":"32","location":"","surveyDate":"2008-03-20","surveyTime":"20:19:01","inputUserId":"32","inputTime":"2008-03-20 20:19:32","modifyTime":"0000-00-00 00:00:00"}]}
{"Head":[{"appeId":"1","survId":"1","location":"","surveyDate":"2008-03-14","surveyTime":"12:19:47","inputUserId":"1","inputTime":"2008-03-14 12:21:51","modifyTime":"0000-00-00 00:00:00"},{"appeId":"2","survId":"32","location":"","surveyDate":"2008-03-14","surveyTime":"22:43:09","inputUserId":"32","inputTime":"2008-03-14 22:43:37","modifyTime":"0000-00-00 00:00:00"},{"appeId":"3","survId":"32","location":"","surveyDate":"2008-03-15","surveyTime":"07:59:33","inputUserId":"32","inputTime":"2008-03-15 08:00:44","modifyTime":"0000-00-00 00:00:00"},{"appeId":"4","survId":"1","location":"","surveyDate":"2008-03-15","surveyTime":"10:45:42","inputUserId":"1","inputTime":"2008-03-15 10:46:04","modifyTime":"0000-00-00 00:00:00"},{"appeId":"5","survId":"32","location":"","surveyDate":"2008-03-16","surveyTime":"08:04:49","inputUserId":"32","inputTime":"2008-03-16 08:05:26","modifyTime":"0000-00-00 00:00:00"},{"appeId":"6","survId":"32","location":"","surveyDate":"2008-03-20","surveyTime":"20:19:01","inputUserId":"32","inputTime":"2008-03-20 20:19:32","modifyTime":"0000-00-00 00:00:00"}]}

相应的ext代码
 
    Ext.onReady(function(){
       
        var proxy=new Ext.data.HttpProxy({url:'HTMLPage.htm'});
        //定义reader
        var reader=new Ext.data.JsonReader({ root:'Head' },
        [
        {name: 'appeId', mapping: 'appeId'},
        {name: 'survId'},
        {name: 'location'},
        {name: 'surveyDate'},
        {name: 'surveyTime'},
        {name: 'inputUserId'}
        ]
        )
        //构徏Store
        var store=new Ext.data.Store(    {
            proxy:proxy,
            reader:reader
        });
        //载入
        store.load();
       
       
        // create the grid
        var grid = new Ext.grid.GridPanel({
            store: store,
            columns: [
            {header: "appeId", width: 60, dataIndex: 'appeId', sortable: true},
            {header: "survId", width: 60, dataIndex: 'survId', sortable: true},
            {header: "location", width: 60, dataIndex: 'location', sortable: true},
            {header: "surveyDate", width: 100, dataIndex: 'surveyDate', sortable: true},
            {header: "surveyTime", width: 100, dataIndex: 'surveyTime', sortable: true},
            {header: "inputUserId", width:80, dataIndex: 'inputUserId', sortable: true}
            ],
            renderTo:'example-grid',
            width:540,
            height:200
        });
       
    });


    (2).如果json 数据?没有数据标题"Head“只需要把readerҎ 如下卛_Q其他不需要改?br />    view plaincopy to clipboardprint?
    //定义reader
    var reader=new Ext.data.JsonReader({},
    [
    {name: 'appeId', mapping: 'appeId'},
    {name: 'survId'},
    {name: 'location'},
    {name: 'surveyDate'},
    {name: 'surveyTime'},
    {name: 'inputUserId'}
    ]
    )

    l验技巧:传data 的URL文g可ؓQhtml,aspx.js{,文g引用的js永远?文g在同一路径?br />    另外主要注意一?HttpProxy 和MemoryProxy的区别,l心的读者可以看?以上两种Ҏ 使用的proxy使用的不?/p>

    MemoryProxy
    MemoryProxy只能从JavaScript对象获得数据Q可以直接把数组Q或JSON和XML格式的数据交l它处理Q如下面的代码所C?br />    var proxy = new Ext.data.MemoryProxy([
    ['id1','name1','descn1'],
    ['id2','name2','descn2']
    ]);
    HttpProxy
    HttpProxy使用HTTP协议Q通过Ajaxd台取数据Q构造它旉要设|?a href="'xxx.jsp'">url:'xxx.jsp'参数。这里的url可以替换成Q何一个合法的|址Q这样HttpProxy才知道去哪里获取数据Q如下面的代码所C?br />    var proxy = new Ext.data.HttpProxy({url:'xxx.jsp'});
    后台需要返回EXT所需要的JSON格式的数据,下面的内容就是后C用JSP的一个范例,如下面的代码所C?br />    response.setContentType("application/x-json");
    Writer out = response.getWriter();
    out.print("[" +
    "['id1','name1','descn1']" +
    "['id2','name2','descn2']" +
    "]");
    h意,q里的HttpProxy不支持跨域,它只能从同一域中获得数据。如果想跨域Q请参考下面的ScriptTagProxy?br />    ScriptTagProxy
    ScriptTagProxy的用法几乎和HttpProxy一P如下面的代码所C?br />    var proxy = new Ext.data.ScriptTagProxy({url:'xxx.jsp'});
    从这里也看不出来它是如何支持跨域的,我们q需要在后台q行相应的处理,如下面的代码所C?br />    String cb = request.getParameter("callback");
    response.setContentType("text/javascript");
    Writer out = response.getWriter();
    out.write(cb + "(");
    out.print("[" +
    "['id1','name1','descn1']" +
    "['id2','name2','descn2']" +
    "]");
    out.write(");");
    ?中的关键在于从h中获得的callback参数Q这个参数叫做回调函数。ScriptTag- Proxy会在当前的HTML面里添加一?amp;lt;script type="text/javascript"src="/xxx.jsp"&gt; &lt;/script&gt;标签Q然后把后台q回的内Ҏ加到q个标签中,q样可以解册域访问数据的问题。ؓ了让后台q回的内容可以在动态生成的 标签中运行,EXT会生成一个名为callback的回调函敎ͼq把回调函数的名UC递给后台Q由后台生成callback(data)形式的响应内容, 然后q回l前台自动运行?



]]>
DataReader/ArrayReader/JsonReader/XmlReaderhttp://www.aygfsteel.com/liuyz2006/articles/384797.html阿?/dc:creator>阿?/author>Sun, 05 Aug 2012 03:33:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/384797.htmlhttp://www.aygfsteel.com/liuyz2006/comments/384797.htmlhttp://www.aygfsteel.com/liuyz2006/articles/384797.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/384797.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/384797.html

DataReader/ArrayReader/JsonReader/XmlReader

Ext.data.DataReader
U虚c?从数据源得到l构化数据{换ؓ元数据对?对象包含Record的集?一般用做Store对象的元数据,
h如下格式
{
totalRecord:int,
records:Array of Ext.data.Record
}
具体使用参见三个子类
Ext.data.ArrayReader/Ext.data.JsonReader/Ext.data.XmlReader


Ҏ
DataReader( Object meta, Object recordType )
构?br />
Ext.data.ArrayReader
用于Ll到一个元数据对象

ArrayReader( Object meta, Object recordType )
构?W一个参数是配置除了可以指示使用哪个字段做id?不懂其它的用?
W二个参数是recordType与record对象的createҎ的参C?是一样config对象数组,具体参见
readRecords( Object o ) : Object
do,q回一个元数据对象

用例C:
//定义数组
var arr=[ [1, 'Bill', 'Gardener'], [2, 'Ben', 'Horticulturalist'] ];
var reader = new Ext.data.ArrayReader(
//以第一个元素做为recordid
   {id: 0},
//定义数组到record的映关p?br />   [
    {name: 'name', mapping: 1},        
    {name: 'occupation', mapping: 2}   
   ]
);
//生成元数?br />var data=reader.readRecords(arr);

Ext.data.JsonReader
用于一个json对象转换为元数据对象

JsonReader( Object meta, Object recordType )
JsonReader的构造参数meta可以有更多选择,
{
id : String,
root : String,
successProperty : String,
totalProperty : String
}
都是对应json对象的属性名

read( Object response ) : Object
从一个response对象q回,response.responseText属性应仅含有一个json格式数据?br />
readRecords( Object o ) : Object
do,q回一个元数据对象

使用CZ:
     var json={ 'results': 2, 'rows': [
    { 'id': 1, 'name': 'Bill', occupation: 'Gardener' },
    { 'id': 2, 'name': 'Ben', occupation: 'Horticulturalist' } ]
};
    var reader=new Ext.data.JsonReader(
        {
        totalProperty: "results",//totalRecords属性由json.results得到
        root: "rows",            //构造元数据的数l由json.rows得到
        id: "id"                //id由json.id得到
        },[
        {name: 'name', mapping: 'name'},
        {name: 'occupation'}            //如果name与mapping同名,可以省略mapping
        ]
    )
    var data=reader.readRecords(json);



Ext.data.XmlReader
xmlreader对象当然是ؓxml而准备的

构?
XmlReader( Object meta, Mixed recordType )
meta与jsonreadercM,
meta是一个{
    id : String,
    record : String,
    success : String,
    totalRecords : String
}对象,只是q些字符串都是相对于文档根目录的domquery路径
read( Object response ) : Object
readRecords( Object doc ) : Object
....


var str=["<?xml version=\"1.0\" encoding=\"utf-8\" ?>",
    "<dataset>",
"<results>2</results>",
"<row>",
   "<id>1</id>",
   "<name>Bill</name>",
   "<occupation>Gardener</occupation>",
"</row>",
"<row>",
   "<id>2</id>",
   "<name>Ben</name>",
   "<occupation>Horticulturalist</occupation>",
"</row>",
"</dataset>"].join("");

//生成xmldocument对象
var xmlDocument;
if(Ext.isIE){
    xmlDocument = new ActiveXObject("Msxml2.FreeThreadedDOMDocument")
    xmlDocument.async=false;
    xmlDocument.resolveExternals = false;
    xmlDocument.loadXML(str)
}
else{
   xmlDocument = (new DOMParser()).parseFromString(str, "text/xml");
}

//然后开?..和其它两个reader一L用法,只是q儿换了一U写?recordtype也可以是一个record对象
var record = Ext.data.Record.create([
   {name: 'name', mapping: 'name'},     // "mapping" property not needed if it's the same as "name"
   {name: 'occupation'}                 // This field will use "occupation" as the mapping.
])
var reader = new Ext.data.XmlReader({
   totalRecords: "results",
   record: "row",           //row是节炚w择?br />   id: "id"                
}, record);
var data=reader.readRecords(xmlDocument);



]]>
ExtJs通过JSON与后台通信http://www.aygfsteel.com/liuyz2006/articles/384780.html阿?/dc:creator>阿?/author>Sat, 04 Aug 2012 13:55:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/384780.htmlhttp://www.aygfsteel.com/liuyz2006/comments/384780.htmlhttp://www.aygfsteel.com/liuyz2006/articles/384780.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/384780.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/384780.htmlExtJs通过JSON与后台通信

Posted on | 二月 22, 2010 | No Comments

引言

 EXT技术对提升用户体验有着先天的优势,很多机构和个人都开始学习EXT技术,截止今天EXT CORE 3.0 也已l发布,EXTJS 3.0 指日可待。虽然性能来让人担忧。。?/p>

 

无论用多么惊天地泣鬼的前台技术,与后台的通信L必须的。本文就目前手头上有的资料和l验来大概阐qC下EXTJS和后台通信q点事?/p>

 

 

Z么要用JSONQ?/strong>

 

 选中JSON不是一拍脑门子的事。EXTJS也不是只支持JSON。目前常用的不外乎下面几U通信方式Q?/p>

 

 

1. 动态语a文g周{Q如JSP
用JSP一cȝ动态语a文g中{数据无疑是传递数据比较简单的一U?但是不好传递对象。随便D个用Session传递数据的例子。例如:
varUserName= <%=session.getAttribute(“user”)%>;
if(UserName==null){
location.href = ‘login.jsp’;
}
~点是不能方便的传递对象。不那么舒服QEXT的不d。还在؜杂用JSPq种相比与EXT来说老掉牙的东西?当然Q如果项目条件不允许Q或者不需要做成彻底的AJAX OnePage应用。这U方式还是可以解军_多迫在眉睫的问题的。(我是d的One Page 狂热者^.^Q?/p>

 

2. JSON
JSON是和JavaScript门当户对的数据传输方式,所以用h会很舒服。而且他可以很方便的传递对象,EXT也对JSON支持的很全面。所有的数据传递需求他都可以胜仅R现在第三方的JSON框架也很成熟?/p>

 

3. XML
EXTJS本n是提供对XMLcd数据的解析功能的Q和JSON一栗?官方的示例程序也有专门演CXML数据通信的。个人感觉和JSON是同一个别的Q也是比较推荐的方式?/p>

 

4. 文本
异步调用q回的东西是文本Q说白了AJAX是靠文本传输数据的Q无论JSONq是XMLQ他都是文本。所以文本很牛的。如果弄好了Q自己定义一个传输格式也不是不可以。一般不复杂的东西,比如传个标记Q传个string什么的。没必要用JSONQ用文本很好用?br />~点已经说了Q就是无法胜ȝ复杂的通信需求?/p>

 

所以目前看来就在JSON和XML中选择一个了。XML以后再表Q我们现在主要表JSON?/p>

 

通信q程

 

 

 

从后台到前台

 

看一下通信q程中的图,其中对象我们已经有了Q也是你想要传递的东西。剩下的Q就是后台如何把对象转换成JSONQ以及前台如何把JSON再解析ؓ对象了。我们先来看后台如何把对象{换成JSON?/p>

 

首先要隆重登场的是我自己改写的一个根据LIST生成JSON的类。其实这cȝ单的要死。所以他只能胜Q把LIST转成JSON的工作。而且q有一个局限,至于是什么局限,我们慢慢说?/p>

 

先看代码:

 

//yueue修改的轻量JSONc?/p>

 

package Extest;
import java.util.ArrayList;

 

 

public class Json {

 

 

public static void main(String[] args) {

 

 

}

public String singleInfo=”";
public Integer total=0;
protected boolean _success=true;
protected String _error=”";
protected ArrayList arrData=new ArrayList();
protected ArrayList dataItem=new ArrayList();
public String getError() {
return _error;
}
public void setError(String error) {
if(!error.equals(“”))this._success=false;
this._error = error;
}
public boolean getSuccess() {
return _success;
}
public void setSuccess(boolean success) {
if(success) this._error=”";
this._success = success;
}

public Json()
{

}

public void reSet()
{
arrData.clear();
dataItem.clear();
}

public void addItem(String name,String _value)
{
dataItem.add(name);
dataItem.add(_value);
}

//一个数l添加完毕,一个新的数l开?br />public void addItemOk()
{
arrData.add(dataItem);
dataItem=new ArrayList();
}

public String ToString()
{
StringBuilder sb=new StringBuilder();
sb.append(“{“);
sb.append(“\”total\”:”);
sb.append(total.toString()+”,”);
sb.append(“\”datas\”:”);
sb.append(“[");
int ad=arrData.size();
for(int i=0;i<ad;i++)
{
ArrayList arr=(ArrayList)(arrData.get(i));
sb.append("{");
int t=arr.size();
for(int j=0;j<t;j+=2)
{
if(j==t) break;
sb.append("\"");
sb.append(arr.get(j).toString());
sb.append("\"");
sb.append(":");
sb.append("\"");
sb.append(arr.get(j+1).toString());
sb.append("\"");
if(j<t-2) sb.append(",");
}
sb.append("}");
if(i<ad-1) sb.append(",");
}
sb.append("]“);
sb.append(“}”);
return sb.toString();
}

}

 

 

代码不长。下面我们看看怎么用这个东西把一个LIST转成JSON

 

 

Json js = new Json();
while (rs.next())
{
js.addItem(“ID”, rs.getString(“ID”));
js.addItem(“Code”, rs.getString(“Sheet_Code”));
js.addItem(“Consignee”, rs.getString(“Sheet_Consignee”));
js.addItem(“Tone”, rs.getString(“Sheet_Tone”));
js.addItem(“Date”, rs.getString(“Sheet_Date”));
js.addItem(“Cash”, rs.getString(“Sheet_Cash”));
js.addItem(“Station”, rs.getString(“Sheet_Station”));
js.addItem(“Class”, rs.getString(“Sheet_Class”));
js.addItemOk();
}

 

System.out.print(js.outputString());

 

 

其中rs是一个ResultSet Q里面放的是从数据库里读取的数据?/p>

 

其中每次 addItem() 都向JSON提交了一个字D?属?Q当字段提交完毕Q执行addItemOk()ҎQ就会创建条完整的记?对象) Q?当你循环执行q个程Q就提交了多条记?对象)Q最后的最后, outputString() Ҏ你前面提交的所有记?对象)转化为JSONq打印出来。你可以Ҏ代码看看最后输出来的JSON到底是个什么样子。有助于你理解JSON?/p>

 

 

上面的这个类看v来似乎不错。实际上q个cd乎没有大的用途。因Z只能处理单的对象Q他遇到M对象都会调用其toString Ҏ试图获得代表q个对象的字W串Q然后储存ƈ转化。当Ӟ如果是String , Integer , Double ,{类型自然没有问题,因ؓq些对象可以不失真的转化为String。而遇C个复杂对象,比如一个由Hibernate生成的对象,他就无能为力了。他不能自动遍历对象下面的所有属性,q一一转换?/p>

 

 

那么怎么解决呢? {案是用强大的第3方类库,比如JSON-Lib 或?org.json?/p>

 

 

JSON-lib 是一个封装了常用的JSON业务的第3方类库,很强Q很大?/p>

 

使用JSON-lib q需要很多特定版本的包来支持Q很烦)?/p>

 

具体的安装,q有需要什么支持包Q去jsonlib|站上看吧?/p>

 

 

下面看一个项目中常用的JSON-Lib使用例子?在ACTION中的代码)

 

 

 

try{
PrintWriter out = response.getWriter();
UserInfo userInfo = (UserInfo)request.getSession().getAttribute(“userinfo”); //从session中得到用户信息对?/p>

String tempStr = “{\”Datas\”:”+JSONSerializer.toJSON(theList,config).toString()+”}”;
out.print(tmpStr);
return null;
}catch(Exception ex){
ex.printStackTrace();
return null;
}

 

 

很简单,使用JSON-Lib转化的工作就在String tempStr = “{\”Datas\”:”+JSONSerializer.toJSON(theList,config).toString()+”}”;
q行搞定了。然后输出就可以了?/p>

 

但是Q这里有3个问题:

 

1. 会有可能出现q

 

2. 会出现环Q比如,对象A中包含BQ而对象B中又再次包含A,于是出现了无限@环的环\。这个时候JSON-LIB会报一个net.sf.json.JSONException: There is a cycle in the hierarchy的错误?/p>

 

3. 会出现日期问题,因ؓJAVA中日期属于一个复杂对象,JSON-Lib会把他当做一个复杂对象去解析Q得到的l果׃是你要的 2009-01-01 q样的字W串?/p>

 

解决ҎQ?/p>

 

1. 请参见我的BLOG Q?《Extjs Ajax q问题解决Ҏ?/p>

 

2. 请参见我的BLOGQ?《json-lib出现There is a cycle in the hierarchy解决办法?/p>

 

3. 对JSON-LIBq行讄 config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor(“yyyy-MM-dd”)); //date processor register

 

所以,最后,q段转换对象的代码最后变?/p>

 

 

response.setContentType(“text/html”);
response.setCharacterEncoding(“utf-8″);

 

try{
PrintWriter out = response.getWriter();
UserInfo userInfo = (UserInfo)request.getSession().getAttribute(“userinfo”); //从session中得到用户信息对?/p>

 

JsonConfig config = new JsonConfig();
config.setIgnoreDefaultExcludes(false);
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor(“yyyy-MM-dd”)); //date processor register
String tempStr = “{\”Datas\”:”+JSONSerializer.toJSON(theList,config).toString()+”}”;
out.print(tmpStr);
return null;
}catch(Exception ex){
ex.printStackTrace();
return null;
}

 

 

可以讉K一下ACTION或者SERVLETQ?看看l果?/p>

 

 

现在把对象{化ؓJSON没问题了。剩下的是前台如何把JSON转化成对象了?/p>

 

其实q部分工作EXT基本全都做了。EXT主要的数据接收和储存靠Store ?EXT提供有JSONStroe 用来处理json ?q部分的工作基本不直接接触JSON Q而是使用EXT?/p>

 

?/p>

 

//Grid Store from servlet
var store = new Ext.data.JsonStore({
url:’/ctams/plan/monthTransportPlan.do?method=findMonthTransportPlan’,
root:’Datas’,
totalProperty: ‘TotalRecords’,
fields:["mtpId",
"mtpDate",
"mtpAcceptnum",
"mtpPlannum",
"mtpCarriagenum",
"mtpTunnage",
"mtpTrainnum",
"mtpFormernum",
"mtpFormertunnage",
"mtpFormertrainnum",
"mtpSwapload",
"mtpEndharbor",
"mtpAlreadyuse",
"mtpFlag",
"mtpRemark",
{name:'mpId',mapping:'monthPlan.mpId'}
],
baseParams:{
planDate:txtSearchText.getValue(),
planType:’42′,
conName:”
}
});

 

 

 

 

从前台到后台

 

 

 

目前我接触到pȝ往前台发送数据主要通过HTTP参数发送?/p>

 

更高U一些的是打包成jsonQ再发回服务?/p>

]]>
Ext.encode ?Ext.decode http://www.aygfsteel.com/liuyz2006/articles/384778.html阿?/dc:creator>阿?/author>Sat, 04 Aug 2012 13:42:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/384778.htmlhttp://www.aygfsteel.com/liuyz2006/comments/384778.htmlhttp://www.aygfsteel.com/liuyz2006/articles/384778.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/384778.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/384778.html

Ext.encode ?Ext.decode

Html代码  
  1. <body>  
  2.     <form id="form1" runat="server">  
  3.     <div>  
  4.     <script type="text/javascript">  
  5.   
  6.  function ready()   
  7.     {   
  8.         //再用一个示例说明下如何使用decode和encodeQ现在我们已l知道什么是json数据格式了,也知道它的作用和语法?  
  9.         //现在我们开始演l吧   
  10.         //先用decodeҎQ这个方法是json字符串{换成对象?  
  11.            
  12.         //W一步:先定义一个json字符串吧   
  13.         var 刘天?nbsp;= "{姓名:'刘d?,性别:'?,老家:'香港'}";   
  14.            
  15.         //W二步:现在我们要把刘天王{换成对象?  
  16.         var who = Ext.decode(刘天?;   
  17.            
  18.         //W三步:who成了对象后就相当于是cȝ对象了,里面的姓名,性别Q老家都成了who的属性了Q现在知道怎么通过对象讉K属性了?  
  19.         var name = who.姓名;    //获取who对象的[姓名]属?  
  20.         var sex = who.性别;     //获取who对象的[性别]属?  
  21.         var home = who.老家;    //获取who对象的[老家]属?  
  22.            
  23.         //W四步:下面获取的信息l合h   
  24.         var result = "刘天王资料的信息Q姓名是--"+name + "Q性别--"+sex+"Q老家--"+home;   
  25.            
  26.         //W五步:我们把获取的who对象的信息用弹出消息的方式显C出来吧   
  27.         Ext.Msg.alert("刘天王的资料信息",result);   
  28.            
  29.         //以上是一个json字符串{换成对象后,再逐个讉K对象的属性的CZ   
  30.            
  31.         //下面使用encodeҎ   
  32.         //encodeҎ很简单了Q就是将上面生成的who对象再{换成W一步定义的json字符?  
  33.            
  34.         //定义一个到旉执行的函?  
  35.         var getJson = function()   
  36.         {   
  37.             //你完全可以把q段写在函数外面Q之所以包含在里面U属是ؓ了在昄W一个消息框后再?U显CZ面这个消息窗?  
  38.                
  39.             var jsonStr = Ext.encode(who);   
  40.                
  41.             //我们q是通过弹出消息的方式把q个json字符串显C出来吧   
  42.             Ext.Msg.alert("jsonStr信息内容",jsonStr);   
  43.         };   
  44.            
  45.         //下面q个Ҏ意思是Q在3U之后会调用函数getJson执行里面包含的脚?  
  46.            
  47.         setTimeout(getJson,3000);    
  48.            
  49.         //补充点东?  
  50.            
  51.         //Ext.decode()和Ext.encode()分别是是 Ext.util.JSON.decode()和Ext.util.JSON.encode的简?  
  52.            
  53.     }   
  54.     Ext.onReady(ready);   
  55.     </script>  
  56.     </div>  
  57.     </form>  
  58. </body>  


]]>
extjs 学习|址http://www.aygfsteel.com/liuyz2006/articles/384775.html阿?/dc:creator>阿?/author>Sat, 04 Aug 2012 13:24:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/384775.htmlhttp://www.aygfsteel.com/liuyz2006/comments/384775.htmlhttp://www.aygfsteel.com/liuyz2006/articles/384775.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/384775.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/384775.htmlExtJS实战(6)-extjs+json
http://www.cnblogs.com/hannover/archive/2009/09/09/1563671.html

]]>
ExtJs中decode与encode(转蝲) http://www.aygfsteel.com/liuyz2006/articles/384022.html阿?/dc:creator>阿?/author>Thu, 26 Jul 2012 02:10:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/384022.htmlhttp://www.aygfsteel.com/liuyz2006/comments/384022.htmlhttp://www.aygfsteel.com/liuyz2006/articles/384022.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/384022.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/384022.html

ExtJs中decode与encode(转蝲)  

2011-05-30 15:28:39|  分类Q? Extjs |字号 订阅

Qhttp://blog.163.com/xiao_mege/blog/static/72942753201102693545195/

在述说这个例子之前,我假想你已经知道什么是Json数据了,那么在这里在温习一下吧:

JSON(JavaScript Object Notation) 是一U数据交换格式,采用完全独立于语a的文本格式;
JSON建构于两U结构:“名称/?#8221;对的集合和值的有序列表

下面详细说明下:
“?U??#8221;对的集合QA collection of name/value pairsQ。不同的语言中,它被理解为对象(objectQ,U录QrecordQ,l构QstructQ,字典QdictionaryQ,哈希?Qhash tableQ,有键列表Qkeyed listQ,或者关联数l?Qassociative arrayQ?
值的有序列表QAn ordered list of valuesQ。在大部分语a中,它被理解为数l(arrayQ?
JSONh以下q些形式Q?nbsp;

对象是一个无序的“‘名称/?#8217;?#8221;集合。一个对象以“{”Q左括号Q开始,“}”Q右括号Q结束。每?#8220;名称”后跟一?#8220;:”Q冒PQ?#8220;‘名称/?#8217; ?#8221;之间使用“,”Q逗号Q分隔?
数组是|valueQ的有序集合。一个数l以“[”Q左中括P开始,“]”Q右中括Pl束。g间?#8220;,”Q逗号Q分隔?nbsp;

|valueQ可以是双引hh的字W串QstringQ、数?number)?ture、false? null、对象(objectQ或者数l(arrayQ。这些结构可以嵌套?

字符ԌstringQ是由双引号包围的Q意数量Unicode字符的集合,使用反斜U{义。一个字W(characterQ即一个单独的字符Ԍcharacter stringQ?
I白可以加入CQ何符号之?/span>

------------------------以下来自癑ֺ的最新报?/span>

下面介绍Ext中两个很重要的方法,其实QExt中没有多余的ҎQ每个方法都能够恰当好处的发挥它的作?q里指它很重要,是因为它们太常用?其是在与数据库交换数据的时?/span>
Ext中有两个很重要的Ҏ,一个是decode;一个是encode.֐思义,一个是~码,一个是解码,你难道真的这么想?
严格的说,一个是json字符串{换成对象;一个是对象{换成json字符?/span>

?面这个示例主要介l的是Ext.decode()和Ext.encode()的用法,其中使用Cjson格式的串Q首先是用到?Ext.decode()ҎQ将json格式的串转换成对象,然后通过对象讉K对象所包含的各个属性的|通过消息框把它们昄出来Q之后在?Ext.encode()已l生成的对象转换成开始定义的json格式的串Q也通过消息框把它们昄出来Q加了一个函敎ͼ使得在第一个消息框弹出3U钟 后再弹出W二个消息框

用图片说明吧

//下面是将json字符串{换成对象?通过对象讉K属性生成的消息?/span>

Ext中中两个很重要的Ҏ,一个是decode;一个是encode. - xiao_mege - 心在哪里Q\在哪里

//下面是将上面生成的对象又转换成json字符串后生成的消息框

Ext中中两个很重要的Ҏ,一个是decode;一个是encode. - xiao_mege - 心在哪里Q\在哪里

具体看下CZ?/span>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testDecode.aspx.cs" Inherits="Test.Example.hello.testDecode" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>试Ext.decode()和Ext.encode()Ҏ</title>
<link rel="Stylesheet" type="text/css" />
<link rel="Stylesheet" type="text/css" />
<script type="text/javascript" src="http://www.cnblogs.com/ExtJS/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="http://www.cnblogs.com/ExtJS/ext-all.js"></script>
<script type="text/javascript" src="http://www.cnblogs.com/ExtJS/ext-lang-zh_CN.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div>
<script type="text/javascript">

function ready()
{
//再用一个示例说明下如何使用decode和encodeQ现在我们已l知道什么是json数据格式了,也知道它的作用和语法?br /> //现在我们开始演l吧
//先用decodeҎQ这个方法是json字符串{换成对象?br />
//W一步:先定义一个json字符串吧
var 刘天?= "{姓名:'刘d?,性别:'?,老家:'香港'}";

//W二步:现在我们要把刘天王{换成对象?br /> var who = Ext.decode(刘天?;

//W三步:who成了对象后就相当于是cȝ对象了,里面的姓名,性别Q老家都成了who的属性了Q现在知道怎么通过对象讉K属性了?br /> var name = who.姓名; //获取who对象的[姓名]属?br /> var sex = who.性别; //获取who对象的[性别]属?br /> var home = who.老家; //获取who对象的[老家]属?br />
//W四步:下面获取的信息l合h
var result = "刘天王资料的信息Q姓名是--"+name + "Q性别--"+sex+"Q老家--"+home;

//W五步:我们把获取的who对象的信息用弹出消息的方式显C出来吧
Ext.Msg.alert("刘天王的资料信息",result);

//以上是一个json字符串{换成对象后,再逐个讉K对象的属性的CZ

//下面使用encodeҎ
//encodeҎ很简单了Q就是将上面生成的who对象再{换成W一步定义的json字符?br />
//定义一个到旉执行的函?br /> var getJson = function()
{
//你完全可以把q段写在函数外面Q之所以包含在里面U属是ؓ了在昄W一个消息框后再?U显CZ面这个消息窗?br />
var jsonStr = Ext.encode(who);

//我们q是通过弹出消息的方式把q个json字符串显C出来吧
Ext.Msg.alert("jsonStr信息内容",jsonStr);
};

//下面q个Ҏ意思是Q在3U之后会调用函数getJson执行里面包含的脚?br />
setTimeout(getJson,3000);

//补充点东?br />
//Ext.decode()和Ext.encode()分别是是 Ext.util.JSON.decode()和Ext.util.JSON.encode的简?br />
}
Ext.onReady(ready);
</script>
</div>
</form>
</body>
</html>

现在q个例子可以说明Ext.decode()和Ext.encode()Ҏ的完作用了.

用图片说明吧

//下面是将json字符串{换成对象?通过对象讉K属性生成的消息?/span>

Ext中中两个很重要的Ҏ,一个是decode;一个是encode. - xiao_mege - 心在哪里Q\在哪里

//下面是将上面生成的对象又转换成json字符串后生成的消息框

Ext中中两个很重要的Ҏ,一个是decode;一个是encode. - xiao_mege - 心在哪里Q\在哪里



------------------------------

Ext.encode与Ext.decode的JSON转换

14 五月 2011 | |页前端 | Tags: decode, encode, extjs

在Extjs中,我们可以通过json来交换数据,Extjs内置了两个方法来互相转换?/span>

Ext.decode( String json ) : Object

把json字符串{换ؓ对象

Ext.encode( Mixed o ) : String

把对象{换ؓ字符Ԍ用这个方法可以在ajax提交时返回数?/span>

var arr = [];

var field1 = {};

field1['name'] = 'fatkun';

field1['age'] = 23;

var field2 = {};

field2['name'] = 'test';

field2['age'] = 24;

arr.push(field1);

arr.push(field2);

Ext.encode(arr);

//q回l果"[{"name":"fatkun","age":23},{"name":"test","age":24}]"




]]>
encodeURI()和encodeURIComponent()Ҏhttp://www.aygfsteel.com/liuyz2006/articles/384017.html阿?/dc:creator>阿?/author>Thu, 26 Jul 2012 01:17:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/384017.htmlhttp://www.aygfsteel.com/liuyz2006/comments/384017.htmlhttp://www.aygfsteel.com/liuyz2006/articles/384017.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/384017.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/384017.html

encodeURI()和encodeURIComponent()Ҏ用于~码传递给览器的URIQ统一资源标识W)。有效的URI?能包含某些字W,如空根{这两个Ҏ用于~码URIQ这L专门的UTF-8~码替换所有的非有效字W,可以ɋ览器仍能够接受q理解它们?/p>

encodeURI() Ҏ用于处理完整的URIQ例如,http://www.itlobo.com/illegal value.htmQ,而encodeURIComponent()用于处理URI的一个片断(如前面的URI中的illegal value.htmQ。这两个Ҏ的主要区别是encodeURI()Ҏ不对URI中的Ҏ字符q行~码Q如冒号、前斜杠、问号和英镑W号Q?encodeURIComponent()则对它发现的所有非标准字符q行~码。例如:

q段代码输出两个|

可以看到Q除I?格外Q第一个URI无Q何改变,I格被替换ؓ%20。第二个URI中的所有非字母数字字符都被替换成它们对应的~码Q基本上使这个URI变得无用。这是 encodeURI()可以处理完整URIQ而encodeURIComponent()只能处理附加在已有URI末尾的字W串的原因?/p>

?Ӟq有两个Ҏ用于解码~码q的URIQ即decodeURI()和decodeURIComponent()。如你所料,q两个方法所做的C其对?的方法相反。decodeURI()Ҏ只对用encodeURI()Ҏ替换的字W解码。例如,Q?0被替换为空|而%23不会被替换,因ؓ它表C?的是英镑W号Q?Q,encodeURI()q不替换q个W号。同LQdecodeURIComponent()会解码所?encodeURIComponent()~码q的字符Q意味着它将Ҏ有的ҎD码。例如:

q段代码输出两个|

在这?例子中,变量uri存放的是用encodeURIComponent()~码的字W串。生成的D明了应用两个解码Ҏ时会发生的事情。第一个值由 decodeURI()输出Q把%20替换成空根{第二个值由decodeURIComponent()输出Q替换所有的Ҏ?/p>

q些URI ҎencodeURI()、encodeURIComponent()、decodeURI()和decodeURICom- ponent()代替了BOM的escape()和unescape()Ҏ。URIҎ更可取,因ؓ它们会对所有UnicodeW号~码Q而BOMҎ 只能对ASCIIW号正确~码。尽量避免用escape()和unescape()Ҏ?/p>

用AJAX提交数据Ӟ

      发送端用encodeURIComponent(escape(xxxxxxx))可以了Q其他发送接受代码同上)

ASP端接收方法:


<%
Response.Charset="gb2312"
Response.Write Unescape(Request("act"))
%>


]]>
ExtAspNet学习-AppBox框架http://www.aygfsteel.com/liuyz2006/articles/381328.html阿?/dc:creator>阿?/author>Fri, 22 Jun 2012 13:47:00 GMThttp://www.aygfsteel.com/liuyz2006/articles/381328.htmlhttp://www.aygfsteel.com/liuyz2006/comments/381328.htmlhttp://www.aygfsteel.com/liuyz2006/articles/381328.html#Feedback0http://www.aygfsteel.com/liuyz2006/comments/commentRss/381328.htmlhttp://www.aygfsteel.com/liuyz2006/services/trackbacks/381328.htmlhttp://www.cnblogs.com/rongyi/archive/2012/03/06/2381614.html

]]>
վ֩ģ壺 | | Ž| | | | Ԫ| | ʯ| ʯȪ| | | | | ͳ| ̫| ʡ| | | | | | | ƽ| | | | | | ľ| | | | | | | | ¹| | | °|