Backbone.js:抓取集合的长度以使用随机数

时间:2013-05-03 07:38:51

标签: backbone.js coffeescript backbone.js-collections backbone-model

我想获取要在随机数生成器中使用的集合的长度。我想要一个视图,显示随机生成的集合的一个模型。我正在使用coffeescript,顺便说一句

到目前为止,我已尝试过类似

的内容
@collection.fetch
  data:
    id: Math.floor((Math.random()*@length)+1)

这是行不通的,因为长度在它被取出之后就不存在了......我尝试过其他一些方法,比如抓取后抓取,但长度总是为零。

任何人都可以告诉我如何做到这一点?

编辑:javascript为那些无法阅读咖啡的人

  this.collection.fetch({
    data: {
      'id': Math.floor((Math.random() * length) + 1)
    }
  });

2 个答案:

答案 0 :(得分:1)

根据Backbone手册:

  

Backbone.Collection

     

集合是有序的模型集

因此,您在应用程序中所需的实际上是来自服务器数据库的随机模型。根据您的API,您需要在服务器中获取记录的计数,然后获取其中一个记录的随机模型。如果您是Serverside API的开发人员,可以通过一个连接实现此目的,否则您可以执行以下操作:

class randomModel extends Backbone.Model

    // Assuming 'GET' /api/model/100 will get record No. 100
    urlRoot: '/api/model'

// ... in your document ready

$ () ->
    model = null
    // Assuming 'GET' /api/count, will return JSON string with your records count
    $.getJSON '/api/count', (response) => 
        model = new randomModel id: (Math.random()*response.count)+1
        model.fetch()
        console.log model

这就是我在你的情况下会使用的。另一种方法是填充整个集合并在填充后获取随机模型(保存一个请求),方法如下:

collection.fetch() // get's all models
collection.get (Math.random()*collection.length)+1

答案 1 :(得分:1)

我过去也有同样的任务。我使用了下划线_.sample方法。 请尝试_.sample(集合),它将从集合中返回随机模型,甚至更好的_.sample(集合,4)为4个随机模型。