【问题标题】:How to get models from a collection that have a certain attribute如何从具有特定属性的集合中获取模型
【发布时间】:2013-06-21 10:38:46
【问题描述】:

我想在我的收藏中获得一些具有属性单元的模型。我目前的方法涉及到这个,

        var unitIds = ciLocal.where({unit: !null});
        console.log(unitIds.length);

奇怪的是删除 !返回 58(总数减去那些不为 null 的)值,而上面的代码返回 0。

谁能建议一个好方法来循环我的收藏并返回那些包含任何东西的模型?

值得一提的是,unit 包含两个值,一个是 unitID,另一个是多个值的数组。我需要恢复整个模型,而不仅仅是单元部分。

在此屏幕截图中,您可以看到 68 具有 null 而 69 具有对象。

{"carID":"37","unit":{"unitID":"37_Chafinch_75","positionHistory":[{"lat":"51.474312","long":"-0.491672","time ":"2011-07-08 11:24:47","status":"1","estimatedSpeed":"0","lastSoundFileName":"停车场出口","lastSoundRange":"10"," lastSoundTime":"2011-07-08 11:25:03","isToday":false,"minutesAgo":1028188}]},"registration":"CJ-361-YG","color":"Luxor" ,"电话":"","型号":"SDV8"}

【问题讨论】:

    标签: backbone.js model


    【解决方案1】:

    您可以在您的集合上使用_.filter 来指定自定义验证函数。

    过滤器 _.filter(list, iterator, [context])
    查看列表中的每个值,返回所有通过的值的数组 真值测试(迭代器)。

    这样的事情应该使模型保持定义的非空值

    var c = new Backbone.Collection([
        {id: 1, unit: 1},
        {id: 2, unit: null},
        {id: 3}
    ]);
    
    c.filter(function(model) {
        var v = model.get('unit');
        return ((typeof(v)!=='undefined') && (v!==null));
    })
    

    还有一个演示 http://jsfiddle.net/nikoshr/84L2R/

    【讨论】:

    • 嗨,我试过了,如果我错了,请纠正我,但我用 ciLocal 替换了 c 并尝试了这个。当我登录 ciLocal 时,我还剩下所有模型。我会尝试发布数据结构的屏幕截图。
    • 模型属性和结构由 JSON 定义。我发布了一个包含单元对象的条目
    • 好吧,我用你的数据修改了我的 Fiddle,我得到了预期的结果jsfiddle.net/nikoshr/84L2R/2你能修改我的 Fiddle 来重现你的问题吗?
    • 我不知道该怎么做,这里显然缺少一些东西。如果我让它工作并勾选你的答案,我会告诉你。
    • 好吧,我的收藏显示为一个孩子,而不是主干.collection,所以我转换了它,你的代码运行良好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-05-02
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多