これは説明するのが少し難しいですが、ここにはあります。私はAzureへのバックエンドのようなページを構築していますが、ユーザーがアイテムをロードする左側のメニューから選択し、AllUsersをその右側に呼びます。 AllUsersにはそのアイテムのオプションがあり、その中のいくつかはそのアイテムの左側に別のアイテムをロードする可能性があります。そのユーザーを呼び出します。ユーザーから、もっと多くのアイテムを右に開くことができます。ページのユニークな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;
};
}
のようなものがそう、ページが追加されるたびに、それはで動作するように、その項目のオブジェクトの新しいインスタンスを作成するJSオブジェクトとうまくそれを設定しています。そのアイテムが削除された場合は、そのアイテムの右にあるすべてのアイテムも再帰的に削除されます。
"eval(pageData.page +" = that ");"という行は、はい、私は今、evalが悪であり、すべてについて読んだことがあります。追加された項目の名前から新しい変数名を作成します。その項目は、スクリプトのインスタンスを呼び出す必要がある場合でも、その変数を使用します。これは主に完全に機能します。
ここで失敗するのは、ユーザーアイテムが別のアイテムを開く場合、そのユーザーのすべての接続を示すConnectionsという名前です。私は、接続をクリックして別のユーザアイテムを開くことができるようにしたいと考えています。同じスクリプトがちょうどあるので、2番目のユーザアイテムが開かれ、AdminPageの新しいインスタンスが作成されるときに、読み込まれた同じ名前を持ち、以前のものからJS変数を書き出します。その後、いくつかのことに影響を与えます。それらのうちの1つを閉じると、例えば両方を閉じ、最初に読み込んだものを閉じると、その右にあるものを閉じるはずですが、childPageプロパティが空になり、動作しません。
だから今、質問のために...
は、変数を作成し処理するためのより良い方法があるか、すべての周りに良い方法すべてのすべてで、この問題は発生しませんよう一緒にあるのでしょうか?
私は悪の評価を使い、世界のすべてを正しいものにすることはできますか?
お寄せいただきありがとうございます。