0

これは私のコレクションのビューです:

Network.Views.Offers.Index = Backbone.View.extend({
  initialize: function() {
    _.bindAll(this, 'render');
    this.collection = new Network.Collections.Offers();
    this.collection
    .on('reset', this.render)
    .fetch();
  },

  render: function() {
    var self = this;
    _.each(this.collection.models, function(model) {
      var view = new Network.Views.Offers.Offer({ model: model });
      $(self.el).append(view.el);
      view.adjustHeight();
    });
    return this;
  },
});

フェッチが成功した後、スピナークラスを追加および削除しようとしました:

this.$el.append('<div class="loading">Loading...</div>');
this.collection
.on('reset', this.render)
.fetch({
  success:function() {
    this.$el.removeClass('loading');
  }
});

しかし、私は得る:

Uncaught TypeError: Cannot call method 'removeClass' of undefined 
4

2 に答える 2

3
this.$el.append('<div class="loading">Loading...</div>');

$el 要素内にロードのクラスを持つ div を追加します。

this.$el.removeClass('loading');

removeClass は、指定されたクラスを持つ要素内の要素を削除しません。

試す:

this.$el.append('<div class="loading">Loading...</div>');
var $this = this; // maintain the context of this within the success callback
this.collection
.on('reset', this.render)
.fetch({
  success:function() {
    $this.$('.loading').remove();
  }
});
于 2013-02-12T14:55:01.907 に答える
1

はコールバック内で$el定義されていないため、TypeError が発生しています。これは、コールバック内でビューが参照されていないためです。thissuccessthissuccessIndex

そのコールバック内のビューを参照するには、thisそのコールバックにバインドする必要があります。thisIndex

success:function() {
  this.$el.removeClass('loading');
}.bind(this)

MDNについて読むbind

于 2013-02-12T14:51:44.227 に答える