2

私はクラス Playlist を持っています:

function Playlist() {
    this.episodes = [ /*episode list*/ ];
};

そして、各エピソードを表示するメソッドを作成したい:

Playlist.prototype.display = function() {
    $('.episodeList').each(function(index) {
        $(this).children('title').text(this.episodes[index].title);
    });
}

問題は、'.episodes[index]' の前の最後の 'this' が、私のプレイリストではなく、選択された dom オブジェクトを表していることです。

この問題を解決するにはどうすればよいですか? ありがとう。

4

4 に答える 4

1

関数をコンテキストにバインドします。

$('.episodeList').each($.proxy(function(index, elem) {
    $(elem).children('title').text(this.episodes[index].title);
}, this));

詳しくはjQuery.proxy

于 2012-07-20T08:52:35.950 に答える
0

eachdom要素で使用する場合、thisそれぞれの内部でdom要素への参照があります

例えば:

Playlist.prototype.display = function(e)
{                                       
    $('.episodeList').each(function(index) {                                  
            console.log(this)                                       
    });
}

console.logdom要素を出力し、それは正しいです。次のように、それぞれの外部にコンソール ログを配置します。

Playlist.prototype.display = function(e)
{   
    console.log(this)                            
    $('.episodeList').each(function(index) {                                  

    });
}

ここconsole.logで、PlayList 関数 (クラス) を出力する必要があります。したがって、各スコープの「これ」はdom要素を参照していますが、Playlist.prototype.displayスコープ内のこれはプレイリスト関数を参照しています。

解決策は次のとおりです。

Playlist.prototype.display = function(e)
{   
    var self = this;                            
    $('.episodeList').each(function(index) {                                  
        console.log(self)
        console.log(this)                   
    });
}      

Playlist スコープと属性から「this」を取得して、self var にする必要があるため、self は Playlist を参照できるようになりました。今、あなたはそれぞれを行うので、それぞれの現在のこれはdom要素への参照を持っていますが、自己変数はまだプレイリストへの参照を持っています.

于 2012-07-20T09:18:32.377 に答える
-1

関数$(this)=episodes[index]内にあるため、コード内。each私はこれがあなたが望むものだと思います、

Playlist.prototype.display = function() {
  var element=$(this);

  $('.episodeList').each(function(index,item) {
        item.children('title').text(element.episodes[index].title);
    });
}
于 2012-07-20T08:52:56.207 に答える
-2

this変数の内容はコンテキストによって変化するため、Javascript での一般的な方法は、現在のクラスを格納するための新しい変数を作成することです。次のようなものを検討してください

    function Playlist()
    {
        var self = this;
        this.episodes = [/*episode list*/];

        this.display = function()
        {
            $('.episodeList').each(function(index) {
                $(this).children('title').text(self.episodes[index].title);
            });
        }
    };

Playlist クラス定義に対して、 myPlaylist.display() を呼び出してコンテンツを表示します。

于 2012-07-20T08:51:50.180 に答える