我想获取要在随机数生成器中使用的集合的长度。我想要一个视图,显示随机生成的集合的一个模型。我正在使用coffeescript,顺便说一句
到目前为止,我已尝试过类似
的内容@collection.fetch
data:
id: Math.floor((Math.random()*@length)+1)
这是行不通的,因为长度在它被取出之后就不存在了......我尝试过其他一些方法,比如抓取后抓取,但长度总是为零。
任何人都可以告诉我如何做到这一点?
编辑:javascript为那些无法阅读咖啡的人
this.collection.fetch({
data: {
'id': Math.floor((Math.random() * length) + 1)
}
});
答案 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个随机模型。