0

私はいくつかのメソッドを持つ関数を持っています。

function acpwindow(){
   this.gui=function(){
            //some stuff
          }
   this.update=function(){
             //some stuff    
          }

}

今、その関数の複数のインスタンスを作成したいと思います。

ウィンドウを作成するボタンがあります。onclick 新しいウィンドウがトリガーされます。

function createwindow(){
     var object1= new acpwindow();
/*
**Here is a problem I have, How to maintain the objects unique.**
*/
}

ユーザーがWindows GUIでいくつかのアクションを実行すると、それらのリクエストがサーバーに送信され、サーバーがそれらのリクエストに応答します。

私のもう1つの問題は、応答に従って特定のウィンドウを更新する方法です。

私が持っている唯一の希望は、リクエストごとに一意の UUID を生成し、同じものが応答で返されることです。

4

2 に答える 2

1

作成したウィンドウを管理する何らかのウィンドウ マネージャーを作成すると、リクエストの送信と処理が簡単になると思います。何かのようなもの:

http://jsfiddle.net/v3T94/1/

この例では、必要に応じてidプロパティを使用できます。それ以外の場合は、を呼び出すときに参照を追跡するとsendRequest、正しい上で必要なことを実行できるはずですacpwindow

于 2012-10-17T05:58:46.670 に答える
1

この種の接続を維持する標準的な方法は、クロージャーを使用することです。

たとえば、次のように書くと

function make_timer()
{
    var x = document.createElement("div");
    var count = 0;
    setInterval(function(){
        count += 1;
        x.textContent = count;
    }, 1000);
    return x;
}

を呼び出すたびmake_timerに、コンテンツが毎秒インクリメントされる独立した DOM ノードが作成されます。しかし、タイマー コールバックはどのノードがインクリメントされる必要があるかをどのように記憶できるでしょうか? 答えは、実際に に渡されるsetIntervalのは関数ではなくクロージャ、つまり関数といくつかの変数 (この場合はcountと) であるということです。x

Java や C++ などの言語にはこの概念はありませんが、それは作成される関数であり、ローカル変数が外側のスコープからのものである場合は「キャプチャ」すると言われ、外側のスコープであってもそれらを「生きたまま」にします。それらを作成した関数は終了します (つまり、関数make_counterが終了するとき)。

まったく同じことが ajax リクエストにも使用できます。通常は、リクエストを送信する関数にウィンドウ オブジェクトを渡すだけで、コールバッククロージャーが完了およびエラー コールバックとして使用されます。クロージャーは、サーバーから応答が返ってきたときに、それぞれのウィンドウ オブジェクトにアクセスできます。

編集

本当に s を使用したい場合IDは、もちろんできます...あなたの例では、それらは配列に格納されているため、正確なものを探すために配列をトラバースする必要がありますID...

var windowid=$("#guiid").val();
for (var i=0; i<window_manager.windows.length; i++)
    if (window_manager.windows[i].id == windowid)
        window_manager.windows[i].gui();

配列の代わりにオブジェクトを使用する方が良いでしょう。その場合、検索は次のように 1 つに減らすことができるからです。

var windowid=$("#guiid").val();
window_manager.windows[windowid].gui();

ただし、多くの場合、Javascript では数値 ID は必要ありません。これは、ウィンドウ ID を格納する代わりに、ウィンドウ オブジェクト自体への参照を格納できるためです。また、コールバックの場合、コンテキストを提供するための複雑な機構は必要ありません (クロージャーがあるため、C++ または Java で必要です)。

于 2012-10-17T06:20:09.537 に答える