2013-08-17 95 views
1

在這段代碼工作...骨幹/下劃線_.each(...)似乎並沒有根據文檔

_.each(this.photos, function(element,index,list) { 
    console.log('element...'); 
    console.log(element); 
    var photoView = new PhotoView({photo:element}); 
    self.$el.append(photoView.render()); 
}); 

element是整個this.photos集合。爲什麼不只是集合中的10個照片元素?

編輯:這裏是我的方法填充的照片收集....

loadPhotos: function(memberId) { 
    var self = this; 
    this.photos = new PhotosCollection([]); 
    this.photos.on('error', this.eventSyncError, this); 
    this.photos.fetch({ 
     url: this.photos.urlByMember + memberId, 
     success: function(collection,response,options) { 
      console.log('Fetch photos success!'); 
      self.render(); 
     } 
    }); 
}, 

收集負載高配車型就好了。在Chrome控制檯中,我可以看到模型的集合。我不確定有什麼問題。我無法用下面海報推薦的任何方法迭代該集合。

回答

0

謝謝您的建議!如果沒有你的建議,我絕不會想到這一點。所以在這裏是問題...

在家長看來,這種加載了照片記錄的特定成員...

loadPhotos: function(memberId) { 
    var self = this; 
    this.photos = new PhotosCollection([]); 
    this.photos.on('error',this.eventSyncError,this); 
    this.photos.fetch({ 
     url: this.photos.urlByMember + memberId, 
     success: function(collection,response,options) { 
      self.render(); 
     } 
    }); 
}, 
父視圖

儘管如此,Backbone.Subviews使用它來調用每個子視圖呈現時。請注意我是如何通過this.photos到subvw-photos ...

subviewCreators: { 
    "subvw-profile": function() { 
     var options = {member: this.member}; 
     // do any logic required to create initialization options, etc., 
     // then instantiate and return new subview object 
     return new ProfileView(options); 
    }, 
    "subvw-photos": function() { 
     var options = {photos: this.photos}; 
     return new PhotosView(options); 
    }, 
    "subvw-comments": function() { 
     var options = {}; 
     return new CommentsView(options); 
    } 
}, 

這是在subvw-photos子視圖中。注意intialize如何接受集合作爲參數。看這個問題?...

initialize: function(photos) { 
    Backbone.Courier.add(this); 
    this.photos = photos; 
}, 

render: function() { 
    console.log('rendering photosview now...'); 
    var self = this; 
    this.photos.each(function(element,index,list) { 
     var photoView = new PhotoView({photo:element}); 
     $(self.el).append(photoView.render()); 
    }); 
    return this; 
}, 

我是路過的對象包裝的照片集合中initalize但隨後處理它喜歡它只是一個裁判的照片集。我不得不改變subvw-照片初始化以下...

initialize: function(args) { 
    Backbone.Courier.add(this); 
    this.photos = args.photos; 
}, 

然後,當然所有的其他代碼神奇地開始工作: -/

再次謝謝您的建議!你絕對讓我走上正軌:-)

3

您正在錯誤地使用_.each方法。該underscore methods需要直接調用的集合:

this.photos.each(function(element,index,list) { 
    console.log('element...'); 
    console.log(element); 
    var photoView = new PhotoView({photo:element}); 
    self.$el.append(photoView.render()); 
}); 

或者你如果想使用_.each從你需要在models property傳遞,而不是集合對象本身作爲列表:

_.each(this.photos.models, function(element,index,list) { 
    console.log('element...'); 
    console.log(element); 
    var photoView = new PhotoView({photo:element}); 
    self.$el.append(photoView.render()); 
}); 
+0

集合(或任何它)沒有每種方法。從Chrome控制檯查看此屏幕截圖[沒有每種方法](http://imgur.com/6NV6rp4)。 更改代碼'this.photos.each(...' – Locohost

+0

補充說,取照片到OP的方法。你看到的代碼有問題嗎? – Locohost

+0

我看不出與取任何問題......但如何你宣佈你的'PhotosCollection'呢?哪種方法你有你'_.each'?基於鉻輸出從我的回答第二個版本是用'this.photos.models'應該工作,但是當再次有你登錄它出來,是哪種方法?可以這樣說。照片「不包含您在嘗試打電話時所期望的內容...... – nemesv

0

應該使用this.photos.each(function(elt, index, list){...})而不是_.each(this.photos,...),因爲this.photos不是下劃線_.chain對象。