2013-04-27 115 views
0

我正在通过骨干网应用程序(对于骨干很新)我的方式工作,并需要一些帮助迭代通过集合,因为我拿它。我想要做的是循环集合中的每个元素,如果progress属性是100显示导入的<div>,否则显示加载<div>迭代虽然Backbone.js集合

我有这个工作最后一个元素集合中,如下所示:

fileRepositoryCollection.fetch({ 

    success: function() { 

     if (fileRepositoryCollection.at(fileRepositoryCollection.length - 1).get('progress') === 100) { 
      $('#loading').hide(); 
      $('#imported').show(); 
     } else { 
      $('#loading').show(); 
      $('#imported').hide(); 
     } 
    } 
}); 

回答

1

在集合类你不应该渲染HTML。你的集合视图应该有一个呈现方法,定义你的集合在html中的样子。然后,您通过视图中的集合进行迭代。

事情是这样的:

var fileRepositoryCollectionView = Backbone.View.extend({ 

    render: function() { 
     // collection rendering 

     this.collection.each(function(file) { 
      if (file.get('progress') === 100) { 
       $('#loading' + file.get('some_id')).hide(); 
       $('#imported' + file.get('some_id')).show(); 
      } else { 
       $('#loading' + file.get('some_id')).show(); 
       $('#imported' + file.get('some_id')).hide(); 
      } 
     }); 

     return this; 
    }, 
}); 

var repView = new fileRepositoryCollectionView({ collection: fileRepositoryCollection}); 
+3

你也可以单独渲染的一个元素。通常会创建addOne方法。 – 2013-04-27 16:13:34

+0

Thansks的 - 我已经把相关的代码备份到渲染方法现在,即时通讯使用表结构与图像显示取决于进展=== 100或<100,因此我必须保持我的两个不同图像在一个TD元素(进口和加载)如下:​​,遗憾的是目前的代码,我都试过了,你建议的代码只与最后一个元素现在正在收集中... – user1694873 2013-04-27 16:34:40