Javascript 将vars传递给eval解决方案,以便在YUI压缩后处理来自json对象的代码字符串
我需要将jQuery对象传递到用于评估的解决方案中。问题是我需要访问位于eval区域之外的jQuery对象,但我看不见它。这是我的Javascript 将vars传递给eval解决方案,以便在YUI压缩后处理来自json对象的代码字符串,javascript,jquery,json,yui,eval,Javascript,Jquery,Json,Yui,Eval,我需要将jQuery对象传递到用于评估的解决方案中。问题是我需要访问位于eval区域之外的jQuery对象,但我看不见它。这是我的 var jObj = $(selector); var myCode = "var jObj="+jObj+"; var i="+i+"; "+shape.mouseover.onEnd.replace("\u0027","'"); var myFucn = new Function(myCode); myFucn(); 我要做的项目是 shape.mouseo
var jObj = $(selector);
var myCode = "var jObj="+jObj+"; var i="+i+"; "+shape.mouseover.onEnd.replace("\u0027","'");
var myFucn = new Function(myCode);
myFucn();
我要做的项目是
shape.mouseover.onEnd.replace("\u0027","'");
正在工作,我在字符串中传递的是
open_info(jObj,i)
这正是我必须解雇的。协议是代码通过YUI压缩程序运行,因此jObj var变成了其他东西,所以我需要传递它。现在我得到一个错误,它认为它应该有和结束]这是不正确的。我似乎在工作,只是没有工作
编辑
有很多方法可以到达我需要的地方,虽然很近,但不太像
现在它在压缩之前工作。。之后不是由于改变。希望你能把它听清楚一些,我可能走错了路,在这里感到困惑 但这不是你想要做的吗 给myFucn送上正确的东西和我的身份
myFucn($(selector),10);
function myFucn(jObj,i)
{
shape.mouseover.onEnd.replace("\u0027","'");
}
我仍然不明白为什么这个问题得到了两张反对票,但它已经解决了,效果很好。诀窍是对dom状态进行相同的操作。一旦它被放置出来,它真的很简单
//so this is what the object is parsed out to from the json string
//since you can't just pass a function stright that way any how
shape.mouseover.onEnd = "open_info(jObj,i)";
//this is what will take that string and process it
//note jObj is what is in the orgain code but it changes to
// var r or something else that is shorter after going thru YUI compressor
// Which is why we can't just use open_info(jObj,i) and it work..
// ie: it's not an issue with scoope but an issues with var names being shortened
(function(){
//this is the trick on passing them so YUI doesn't get them
//use a string and YUI skips it so we directly create the
//needed oject in the window namespace
window['jObj']=jObj; window['i']=i;
var p= shape.mouseover.onEnd;
var f= new Function(p);
f();
})();
就是这样。。我把它放在一个点击或悬停事件中,所以它类似于一次点击
/* EXMAPLE OUTPUT AFTER YUI COMPRESSION
//Note after the YUI compressor get ahold of that
//processing code above it'll look like
*/
function(){window.jObj=n,window.i=t;var u=i.mouseover.onEnd,r=new Function(u);r()}();
因此,工作的方式是,我需要修复var jObj被重命名的问题。因此,我只需为名称设置一个sting,并让压缩的var名称填充处理后的代码字符串所需的对象名称。不知道为什么我以前没有看到它,我会保存我的rep值:-\。。哦,好吧。也许是缩短时间的一种方法,但我现在就不谈了
编辑
我放弃了它正在工作的编辑。:)很好。。我想知道还有什么其他方法可以让它做同样的事情。为什么要使用
eval
?可能您试图解决错误的问题。为什么要使用新函数
?为什么不做一个普通函数呢var myFucn=function(){}
jQuery对象无法转换为字符串。它变成了“[object object]”
,可能是指您的]
错误。您的示例有点奇怪-为什么不直接运行该代码,而不是将其转换为字符串,使用新函数
并直接调用它?我支持Joseph。如果不在上下文中查看代码,很难判断,但看起来您想要使用的是一个闭包。您做错了吗?为什么要在字符串中声明变量,并在下一行中尝试将这些变量作为代码进行求值,而不是立即构建变量?这行不通,myFucn($(选择器),10);将在shape.mouseover.onEnd字符串中。当函数myFucn(jObj,i)通过YUI压缩机时,它将作为函数p(r,e)出现故障,这样可以吗?函数p(r,e)与myFucn(jObj)相同是的,它的作用相同。。这并不意味着下一次压缩时,它将是相同的替换。或者这个问题不在这里,哈哈。。tk--但是如果你使用一个好的压缩器,它肯定不会影响代码吗?哈哈,是的。。这是最好的之一。所有这些都是关于这样一个事实,即嵌入代码的snipit被注入了来自锁定json提要的一些检查。这是一种,嗯,特殊的处理方式,但我想,如果它能工作的话,那就没问题了。(虽然我不知道为什么要将参数传递给实际上不接受任何参数的函数。)哈,是的,在我粘贴它之前,有一个完整的剩余。我把它清除了。
/* EXMAPLE OUTPUT AFTER YUI COMPRESSION
//Note after the YUI compressor get ahold of that
//processing code above it'll look like
*/
function(){window.jObj=n,window.i=t;var u=i.mouseover.onEnd,r=new Function(u);r()}();