0

OK、私は最初に私がここで少し頭を抱えていることを告白します。

いくつかのコードが正常に機能しています。グローバル配列変数を作成z1=[];し、次のコードで一意の参照キーrを使用して、ZeroClipboardオブジェクトを配列に格納しました。(これ自体は悪かもしれませんが、うまくいきました。)

function zc(r){
    var a="RP"+r,b="RDC"+r,c="RP"+r;
    z1[r]=new ZeroClipboard.Client();
    z1[r].addEventListener('mouseDown',function(client){z1[r].setText(document.getElementById(c).innerHTML);});
    z1[r].addEventListener('complete',function(client,text){$('#'+a).aH("#D6EBFF",1000);});
    z1[r].glue(a,b);}

私は最近、z1をグローバル変数として持つことがどれほど邪悪であるかを理解したので、自分のやり方を修正して、ビジネス全体をバインドするオブジェクトを作成しようとしています。しかし、それは機能していません...

私は次のことをしました:

var zc={
    z1: [],

    add:function(r){
        var a="RP"+r,b="RDC"+r,c="RP"+r;
        z1[r]=new ZeroClipboard.Client();
        z1[r].addEventListener('mouseDown',function(client){z1[r].setText(document.getElementById(c).innerHTML);});
        z1[r].addEventListener('complete',function(client,text){$('#'+a).aH("#D6EBFF",1000);});
        z1[r].glue(a,b);}
}

そして、私は今、以前zc.add(r)のようにではなく、電話をかけていzc(r)ます。

私が得ているFirebugエラーはですz1 is not defined'add'メソッドが'z1'プロパティを表示できないのはなぜですか?

[ああ、なぜ私がそのまま入れないのかと聞かれる前にz1zcそれはコードの他の場所からアクセスz1しているためです。そのため、オブジェクトにさらにメソッドを追加します。)

4

3 に答える 3

2

z1[r]に変更this.z1[r]

ルックアップを回避するために、スコープ内の変数に設定することもお勧めします。

var zr = this.z1[r] = new ZeroClipboard.Client();
zr.addEventListener()
于 2012-04-09T02:31:59.507 に答える
2
  1. z1オカレンスをに置き換えますthis.r1
  2. おそらく私はあなたの努力を誤解していますがzc、グローバル変数でもあります(そうです)
于 2012-04-09T02:33:25.277 に答える
0

zcは2番目のコードブロックのオブジェクトリテラルであるため、無名関数はそのオブジェクトのメンバーを認識していないと思います(つまり、同じクロージャーに含まれていません)。代わりに、新しい関数を作成する必要があります。

var ZC = function () {
    var z1  = [];
    this.add = function(r){
        var a="RP"+r,b="RDC"+r,c="RP"+r;
        z1[r]=new ZeroClipboard.Client();
        z1[r].addEventListener('mouseDown',function(client){z1[r].setText(document.getElementById(c).innerHTML);});
        z1[r].addEventListener('complete',function(client,text){$('#'+a).aH("#D6EBFF",1000);});
        z1[r].glue(a,b);
    };
};
var _zc = new ZC();
_zc.add();

これには、z1をプライベートに保つという利点もあります(関数のスコープ外ではアクセスできません)。

于 2012-04-09T02:33:15.233 に答える