[英]Identify Unique JS Object on page
这有点难以描述,但是可以理解。 我正在构建一个页面,该页面看起来类似于Azure的后端,在该页面中,用户从左侧的菜单中选择加载项目的菜单,现在将其称为AllUsers,在其右侧。 在AllUsers中,有该项目的选项,其中一些选项可能会在其左侧加载另一个选项,我们将其称为User。 在“用户”中,您可以在右侧打开更多项目。
我用JS对象很好地设置了类似
var AdminPage=function(){
this.con="../controllers/admin/admin_con.php";
this.pageName=null;
this.childPage=null;
this.page=null;
this.deleteItem=function(){
//Recursively deletes pages to the right
if(this.childPage){
this.childPage.delete();
this.childPage=null;
}
if(this.page){
this.page.remove();
}
return this;
}
this.add=function(pageData){
if(this.childPage){
this.deleteItem();
}
this.childPage=new AdminPage();
this.childPage.getPage(pageData);
return this;
};
this.getPage=function(pageData){
var that=this;
this.pageName=pageData.page;
$.post(this.con, pageData,
function(data,status){
if(status==='success'){
$("#rightCol").append(data);
var num=$("#rightCol").children().length;
that.page=$("#rightCol").children()[num-1];
eval(pageData.page+"=that");
}
}
);
return this;
};
}
因此,每次添加页面时,它都会创建该对象要使用的对象的新实例。 如果该项目被删除,则它也会递归地删除其右侧的所有项目。
行“ eval(pageData.page +“ = that”);“ 是的,我现在知道eval是邪恶的,并且已经阅读了所有内容,并从已添加项的名称中创建了一个新的变量名。 该项目说User项目然后在需要调用其脚本实例时也使用该变量。 所有这些几乎都能完美地工作。
如果User(用户)项打开另一个失败,则将其称为Connections(连接),该连接显示该用户的所有连接。 然后,我希望能够单击一个连接并打开另一个User项目,这可以正常工作,因为当打开第二个User项目并创建AdminPage的新实例时问题就出在哪里了,因为相同的脚本只是加载并具有相同的名称,它将覆盖前一个变量的JS变量。 然后影响几件事。 如果您关闭其中一个,则例如,如果您关闭了第一个已加载的,它也将关闭它右边的内容,但是childPage属性现在为空,因此不起作用。
所以现在开始提问。
有没有更好的方法来创建变量,或者有没有更好的方法根本不会导致这个问题?
我可以绕过Eval评估并让世界一切正常吗?
感谢您的任何建议。
因此,我找到了解决该问题的方法,但我还是不太喜欢。
我已经生成了一个唯一的ID,并将其附加到我用作变量的脚本名称的末尾。
这种方法的问题是它仍在使用eval,现在我必须在获取新项时传递变量往返,以便可以使用php将变量名注入页面。
不完美,必须有更好的方法。
这是更新的添加功能
this.add=function(pageData){
if(this.childPage){
this.deleteChildren();
}
this.childPage=new AdminPage();
this.childPage.id=pageData.page+"_"+(Math.floor(Math.random() * (999999999 - 100000000 + 1)) + 100000000);
eval(this.childPage.id+"=this.childPage");
this.childPage.getPage(pageData);
return this;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.