[size=medium]
eval(str)是JavaScript自带的一个函数,它可以执行传入的JavaScript语句字符串,并返回语句执行得到的结果. 比如: var a= eval('2+3'); 它的执行效果和a=2+3相同.
eval("alert('this is a test')"); 和alert('this is a test')效果相同. 大家也许会觉得eval函数纯粹是多此一举, 就连W3C school也有这个意思:
"虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多". 但实际上eval这个函数有时还是有很大用处的, 巧妙地使用eval()会给你一个很大的惊喜.
ExtJs中, TreePanel和TabPanel是一对很好的搭档:前者作为菜单, 后者作为工作区域. 现在的问题是如何给节点添加单击事件以达到这样的效果: 单击一个树节点, 打开一个新的选项卡.
有两种解决方案:
第一种是给每个节点单独添加单击事件. 功能少的时候可以采用这个方法.功能多时,若采用这个方法就显得很笨拙了.
详细介绍第二种——使用eval函数.
整个工程包含一个JSP文件和三个js文件(extjs自带的不算).
index.jsp: 唯一的作用就是作为js和css的载体.
main.js: 生成主界面;
login.js:生成登录界面 ;
register.js:生成注册界面.
达到的效果如tree.jpg所示(偷个懒,没写提交按钮):
相关代码在附件js.zip中. 下面详细解析main.js中给treepanel的代码(主要是看注释啦).
var left=new Ext.tree.TreePanel({
region:"west",
width:150,
title:"功能导航",
listeners:{
"click":function(node){
var text=node.attributes.text;
var id=node.attributes.id;
var p=center.getItem(id)//
if(center.getItem(id)!=null){
center.setActiveTab(p);
return;
}
var fun=id+".getPanel()";//拼出生成目标面板的方法名
p=eval(fun);//执行以fun作为方法名的方法,并将返回的面板对象存入变量p中
center.add(p);//center就是中央的tabPanel
center.setActiveTab(p);
}
}
});
// ....
var nodeRegister =new Ext.tree.TreeNode({
text:"注册",
id:'register'
});
// ....
.比如单击'注册'时, fun的值为为 "register.getPanel()".而registered.getPanel() 方法是定义在register.js中的一个生成注册面板的方法:
Ext.namespace("register");
register.getPanel=function(){
var p=new Ext.FormPanel({
title:"注册",
id:'register',
closable:true,
width:500,
height:500,
frame:true,
defaults:{
labelWidth:65
},
items:[{
xtype:"textfield",
fieldLabel:"用户名"
},{
xtype:"textfield",
inputType:"password",
fieldLabel:"密码"
},{
xtype:"textfield",
inputType:"password",
fieldLabel:"确认密码"
}]
});
return p;//返回注册面板
}
这种利用eval+字符串拼接解决方案的优点是够简单, 缺点是生成面板的方法命名和节点的属性值必须要统一,(在示例中为了少写几个属性, 我直接用了节点的id属性作为方法名的一部分.你也可以定义其它的属性去拼方法名,比如url), 并且所有的js文件都在index中引用, 无论有没有需要都会全部加载.
还有另外一种利用eval+继承 的解决方案不需要在index.jsp引用全部的js文件, 可以实现按需加载,但在原理上有点复杂, 此处也不详细讲解了,代码贴在附件js2.zip中.
[/size]
- 大小: 10.1 KB
分享到:
相关推荐
java实现eval函数,java文件放入eclipse直接可以运行。
使用Python实现的四则运算,注释清晰,功能备注完整,主要练习函数递归和正则表达式,目前只能计算整数的四则运算,如需完善,可把int改为float类型,然后修改正则表达式即可,代码逻辑完全不用动。供初学Python的...
NULL 博文链接:https://longxingtx520.iteye.com/blog/1163552
详细介绍eval函数用法,一看必懂.。。。
使用java来实现js中eval的功能,包括字符串的计算,判断真假等功能
Python的eval函数写的eval_calc(计算器) 进行了多重符号判断,可以在很大程度上帮助孩子们学习。
NULL 博文链接:https://javasam.iteye.com/blog/1461999
JavaScript有许多小窍门来使编程更加容易。其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。
深入认识javascript中得eval函数深入认识javascript中得eval函数深入认识javascript中得eval函数
我们知道,在很多脚本语言中都有eval函数,它可以把字符串转换为表达式并执行.如在javaScript中: var str = aid.value + ".style.top = 10;" 把一个id为"aid"的控制的值取出来加合并成一个字符串,如果aid的值是...
在利eval函数执行一段代码时,必须要去掉里面的换行符和回车符,但如果不去掉注释,会出现问题,就是注释后面的所有内容不执行,被当作是注释的内容,所以还要去掉各种注释,这里的解决方案可以把所有注释都去掉
2020年EVAL 函数EXECUTEGLOBAL 语句使用说明.pdf2020年EVAL 函数EXECUTEGLOBAL 语句使用说明.pdf2020年EVAL 函数EXECUTEGLOBAL 语句使用说明.pdf2020年EVAL 函数EXECUTEGLOBAL 语句使用说明.pdf2020年EVAL 函数...
在Javascript中Eval函数的使用
Perl die、warn、eval函数使用总汇
本文实例分析了javascript中eval函数用法。分享给大家供大家参考。具体分析如下: eval()只有一个参数,如果传入的参数不是字符串,则直接返回这个参数。否则会将字符串当成js代码进行编译,如果编译失败则...
今天看代码,遇到一个eval函数的问题,到现在翻了很多博文,还是不是很懂eval函数,有个一直没法理解的代码如下: /* var start = [] , end = [] , timings = []; */ function f(){ //模拟程序执行时间 var sum ...
)一 eval函数问题 JavaScript中的eval函数是颇受开发者争议的问题之一,问题主要在于其可能导致的不安全性。有关此方面问题,在此不再赘述,读者可能很容易地浏览到许多介绍性文章。 但是,eval函数的优点也是...
javascript中eval函数用法分析.docx