关于javascript:在主干视图中处理图像错误事件

Working with an image error event in a Backbone view

在Backbone 视图使用的Underscore模板中,我有一个图像。我试图附加到错误事件并在未找到原始图像的情况下更改图像源。

基于这个类似的问题,我采用了以下方法:

1
2
3
4
5
6
7
8
9
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的更改移动到视图中的单独方法,则将调用该方法,但图像不会更改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 ",但是图像不会出现。我知道它的存在是因为上面概述的第一种方法很好用。

我在这里想念什么?


我认为您的问题就在这里:

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

在您的handleMissingImage函数中,您说:

1
i = $(evt.currentTarget);

因此i是jQuery对象,而不是原始DOM元素。这意味着您想说i.attr('src', ...)来更改src属性,或者根本不用去packageevt.currentTarget