2016-11-08 9 views
0

これは説明するのが少し難しいですが、ここにはあります。私は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プロパティが空になり、動作しません。

だから今、質問のために...

は、変数を作成し処理するためのより良い方法があるか、すべての周りに良い方法すべてのすべてで、この問題は発生しませんよう一緒にあるのでしょうか?

私は悪の評価を使い、世界のすべてを正しいものにすることはできますか?

お寄せいただきありがとうございます。

答えて

0

私は問題の答えを見つけましたが、まだそれほど好きではありません。

私は一意のIDを生成し、それを変数として使用していたスクリプトの最後に追加しました。

このメソッドの問題はまだevalを使用しているので、変数名をページに挿入するために新しい項目を取得するときに変数往復を渡す必要があります。

完全ではなく、より良い方法が必要です。ここで

が更新add関数は

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; 
}; 
です
関連する問題