1

バックボーン ビューで使用されるアンダースコア テンプレート内に、画像があります。エラーイベントに添付して、元の画像が見つからない場合は画像ソースを変更しようとしています。

この同様の質問に基づいて、次のアプローチを取りました。

render: function() { 
    var self = this;

    this.$el.html( this.template( { person: this.model.toJSON() } ) ); 

    this.$el.find('img.employee-image').on('error', function(evt) { this.src = "assets/images/_noimage.gif"; });

    return this;
}

これは完全にうまく機能しますが、src の変更をビュー内の別のメソッドに移動しようとすると、メソッドは呼び出されますが、画像は変更されません。

render: function() { 
    var self = this;

    this.$el.html( this.template( { person: this.model.toJSON() } ) ); 

    this.$el.find('img.employee-image').on('error', function(evt) { self.handleMissingImage(evt); });

    return this;
},

handleMissingImage: function(evt) {
    // This by itself did not work.
    // this.src = "assets/images/_noimage.gif";

    var i = $(evt.currentTarget);
    i.src = "assets/images/_noimage.gif";
    console.log(i.src);
}

src をログアウトすると、「assets/images/_noimage.gif」が表示されますが、画像は表示されません。上記の最初のアプローチがうまく機能するため、それが存在することを知っています。

ここで何が欠けていますか?

4

1 に答える 1

0

あなたの問題はここにあると思います:

i.src = "assets/images/_noimage.gif";

あなたのhandleMissingImage機能では、次のように言います。

i = $(evt.currentTarget);

i生の DOM 要素ではなく、jQuery オブジェクトも同様です。つまり、属性i.attr('src', ...)を変更するsrcか、ラッピングをまったく気にしないでくださいと言いたいということですevt.currentTarget

于 2013-11-07T21:26:07.930 に答える