从Backbone中的集合中的每个模型中获取随机项

时间:2013-04-22 05:37:51

标签: javascript backbone.js collections random model

我的数据看起来像

var categories = [
    {
        name: 'Animals',
        img: 'animals.jpg',
        list: [{name: 'Cat', img: 'cat.jpg', state: 'hidden'}, {name: 'Dog', img: 'dog.jpg', state: 'hidden'}, {name: 'Zebra', img: 'zebra.jpg', state: 'hidden'}, {name: 'Rabbit', img: 'rabbit.jpg', state: 'hidden'}]
    },
    {
        name: 'Birds',
        img: 'birds.jpg',
        list: [{name: 'Eagle', img: 'eagle.jpg', state: 'hidden'}, {name: 'Owl', img: 'owl.jpg', state: 'hidden'}, {name: 'Parrot', img: 'parrot.jpg', state: 'hidden'}, {name: 'Swan', img: 'swan.jpg', state: 'hidden'}]
    },
    {
        name: 'Fruits',
        img: 'fruits.jpg',
        list: [{name: 'Apple', img: 'apple.jpg', state: 'hidden'},{name: 'Cherry', img: 'cherry.jpg', state: 'hidden'},{name: 'Banana', img: 'banana.jpg', state: 'hidden'}, {name: 'Strawberry', img: 'strawberry.jpg', state: 'hidden'}, {name: 'Mango', img: 'mango.jpg', state: 'hidden'}, {name: 'Orange', img: 'orange.jpg', state: 'hidden'}, {name: 'Pomegranate', img: 'pomegranate.jpg', state: 'hidden'}, {name: 'Jackfruit', img: 'jackfruit.jpg', state: 'hidden'}]
    },
    {
        name: 'Flowers',
        img: 'flowers.jpg',
        list: [{name: 'Rose', img: 'rose.jpg', state: 'hidden'}, {name: 'Tulip', img: 'tulip.jpg', state: 'hidden'}, {name: 'Hibiscus', img:'hibiscus.jpg', state: 'hidden'}, {name: 'Sunflower', img: 'sunflower.jpg', state: 'hidden'}]
    }
    ];

这里我将类别用作集合,每个类别用作模型。我想要的是从这个集合中获取一组随机对象,这些对象位于每个模型的列表中。如果我点击随机,我可能会得到一份菠萝蜜,玫瑰,苹果,鹰,猫,郁金香的清单。

我不太确定我创建的结构是否正确。我应该为每个类别的对象列表数组中的每个项目使用模型吗?

1 个答案:

答案 0 :(得分:0)

这可能是许多因素发挥作用的情况。

如果模型是静态的或动态的。前一种情况可能很容易。其中你需要知道你馆藏中所有模特的id或cid的范围。

静态案例

将所有ID存储在一个数组中。使用Math.random()选择数组的随机索引。

然后你可以使用这个

collection.get( arr[Math.random() * arr.length()]);

认为这可能是一种矫枉过正,但如果不了解数据的来源或范围,很难说更好的方法。