0

我在遍历有助于用数据填充视图的集合时遇到问题。当我尝试遍历集合并收到以下错误时,

未捕获的类型错误:对象 # 没有方法“每个”

我绝对不知道为什么会收到此错误,除了对象显然没有该方法,但是我仅在运行 drop 函数时才收到此错误,请参见下面的代码。

这是主干代码,

GroupListView.prototype.keyup = function() {
      this.filtered = this.collection.searchName(this.$el.find("#search-query").val());
      return this.renderList(this.filtered);
};

GroupListView.prototype.renderList = function(collection) {
  var $collection, $this;
  console.log(this.$el);
  console.log(collection);
  if (!collection) {
    collection = this.collection;
    console.log(collection);
  }
  this.$el.find(".list-items").empty();
  $this = this.$el.find("#people-groups-list");
  $collection = collection;
  if ($collection.length < 1) {
    this.$el.find("#people-groups-list").hide();
    return this.$el.find("#people-groups-list").after('<div class="activity-no-show">\
    <p>To add a new group, click the + in the top right hand corner to get started.</p>\
</div>');
  } else {
     this.$el.find("#people-groups-list").show();

    collection.each(function(item) {
      //console.log(item);
      var displayView;
      displayView = new app.GroupListDisplayView({
        model: item,
        collection: $collection
      });
      return $this.append(displayView.render());
    });
    return this;
  }
};

GroupListDisplayView.prototype.render = function() {
      var $body;
      //console.log(this.model.toJSON());
      this.$el.html(this.template({
        m: this.model.toJSON()
      }));
      $body = this.$el.find(".card-body");
      $.each(this.model.get("people"), function(i, person) {
        var personTile;
        this.person = new app.Person({
          id: person.id,
          avatar: person.avatar,
          first_name: person.first_name,
          last_name: person.last_name
        });
        console.log(this.person);
        personTile = new app.PersonTileView({
          model: this.person
        });
        return $body.html(personTile.render());
      });
      return this.$el.attr("id", "group-card-" + this.model.id);
    };

GroupListDisplayView.prototype.drop = function(e) {
      var $collection, $model, person_id, request;
      e.preventDefault();
      $collection = this.collection;
      person_id = e.originalEvent.dataTransfer.getData('Text');
      request = new app.PersonGroupAdd;
      $model = this.model;
      return request.save({
        async: true,
        wait: true,
        person_id: person_id,
        group_id: this.model.get("id")
      }, {
        success: function(d) {
          return $model.fetch({
            async: true,
            wait: true
          });
        }
      });
    };

GroupListView.prototype.initialize = function() {
      this.collection.on("change", this.renderList, this);
      this.collection.on("reset", this.render, this);
      return this.renderList();
    };
4

2 回答 2

0

试试这个,把这个函数放在你的集合中

parse: function (data) {

            data.forEach(function (item) {

                displayView = new app.GroupListDisplayView({
                  model: item,
                  collection: $collection
                });
            });
        }

希望这可以帮助。

于 2013-06-25T16:20:51.253 回答
0

我不确定该drop函数与它有什么关系,但我看到renderList传递了searchNameduring的结果keyup。可能发生的searchName是返回一个常规数组,而不是具有该each方法的包装对象(即 Backbone.Collection、jQuery 集合或 Underscore 包装对象)。

而不是调用collection.each,使用 jQuery 或下划线:

$.each(collection, function(i, item) { ... });

或者

_.each(collection, function(item, i, list) { ... });
于 2013-06-25T16:40:08.813 回答