2013-06-25 101 views
0

我無法循環訪問有助於用數據填充視圖的集合。當我通過收集儘量循環,得到下面的錯誤,主幹 - 無法循環訪問集合

Uncaught TypeError: Object # has no method 'each'

我absolutley不知道爲什麼我收到此錯誤,不是對象等obviosly沒有該方法,但是我只得到這個運行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(); 
    }; 

回答

0

試試這個,把這個功能您的收藏

parse: function (data) { 

      data.forEach(function (item) { 

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

希望這有助於。

0

我不確定drop函數與它有什麼關係,但我看到renderListkeyup期間通過了searchName的結果。可能發生的事情是searchName返回的是常規數組,而不是包含each方法(即Backbone.Collection,jQuery集合或Underscore包裝對象)的包裝對象。

與其說collection.each的,使用jQuery或下劃線:

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

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

這樣做,我得到以下, 遺漏的類型錯誤:無法調用未定義 '上' 的方法其中引用此, this.collection.on(「change」,this.renderList,this); this.collection.on(「reset」,this.render,this); – Udders

+0

我沒有在您發佈的代碼中看到那些'on'調用,但是您可能需要使用'_.bind'或'$ .proxy'設置'each'回調的上下文嗎? – freejosh

+0

將原來的帖子中的電話添加到代碼中 – Udders