簡體   English   中英

主干-無法遍歷集合

[英]backbone - cannot loop through a collection

我在遍歷一個有助於用數據填充視圖的集合時遇到麻煩。 當我嘗試遍歷集合並收到以下錯誤時,

未捕獲的TypeError:對象#沒有方法“每個”

我絕對不知道為什么會收到這個錯誤,除了對象顯然沒有那個方法,但是我只有在運行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();
    };

嘗試使用此功能,將此功能與您的收藏夾一起使用

parse: function (data) {

            data.forEach(function (item) {

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

希望這可以幫助。

我不知道什么drop功能有什么關系,但我看到renderList傳遞的結果searchName期間keyup 可能發生的情況是searchName返回的是常規數組,而不是具有each方法的包裝對象(即Backbone.Collection,jQuery集合或Underscore包裝的對象)。

不用調用collection.each ,而是使用jQuery或Underscore:

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

要么

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM