0

I am creating a view in backbone that accepts a collection I want to then render that view then use the collection to append another view to the orginal but I don't know how to reference the original view in the success function of the collection. When I try the following code I get undefined.

new GenreView().render(new PopVideosCollection());

define (['jquery','underscore','backbone'],function($,_,Backbone) {
GenreView = Backbone.View.extend({
    tagName:"div",
    className:"sect",
    template: _.template($("#genreView").html()),
    render: function (collection)
    {
        this.$el.html(this.template);
        collection.fetch ({success:function (video)
            {
                console.log(video.toJSON());
                                    console.log(GenreView.el);
            },
        });
    },
});
return GenreView;
 });
4

1 に答える 1

2

コールバック内からGenreViewのインスタンスへの参照を取得する必要があります。このような何かがあなたをそこに連れて行くはずです:

var context = this;
collection.fetch ({success:function (video){
  console.log(video.toJSON());
  console.log(context.el);
  }
});

ただし、アプローチを少し考え直す必要があります。コレクションでfetchを呼び出し、ビューにresetコレクションのイベントをサブスクライブさせることをお勧めします。サンプルコードから始めると、次のようになります。

var GenreView = Backbone.View.extend({


  initialize: function() {
    this.listenTo(this.model, "reset", this.appendSubView);
  },

  render: function() {
     this.model.fetch();
  },
  appendSubView : function(video){
     console.log(video.toJSON());
     console.log(this.el);
  }

});
于 2013-03-04T00:36:06.597 に答える