0

乱数ジェネレーターで使用するコレクションの長さを取得したいと考えています。ランダムに生成されたコレクションの 1 つのモデルを表示するビューが必要です。私はコーヒースクリプトを使用しています。

これまでのところ、次のようなものを試しました

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

フェッチされるまで長さが存在しないため、これは機能しません...フェッチ後にグラブするなど、他のいくつかの方法を試しましたが、長さは常にゼロです。

誰でもこれを行う方法を教えてくれますか?

編集:コーヒーが読めない人のためのJavaScript

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

2 に答える 2

1

私は過去に同じ仕事をしていました。アンダースコア _.sample メソッドを使用しました。_.sample(collection) を試してみてください。コレクションからランダム モデルを返すか、4 つのランダム モデルの場合は _.sample(collection, 4) を返します。

于 2015-05-07T02:26:42.720 に答える
1

バックボーンのマニュアルによると:

バックボーン コレクション

コレクションは順序付けられたモデルのセットです

したがって、アプリケーションで実際に必要なのは、サーバー データベースからのランダムモデルです。API によると、サーバー内のレコードの数を取得してから、レコードの 1 つのランダム モデルを取得する必要があります。あなたがサーバーサイド API の開発者である場合は、1 つの接続でそれを行う方法があります。それ以外の場合は、次のようにすることができます。

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

それは私があなたの場合に使用するものです。別の方法は、次のようにして、コレクション全体にデータを入力し、データが入力された後にランダム モデルを取得することです (1 つの要求を保存します)。

collection.fetch() // get's all models
collection.get (Math.random()*collection.length)+1
于 2013-05-04T09:33:29.943 に答える