【问题标题】:Filter Backbone collection on multiple model attributes过滤多个模型属性的主干集合
【发布时间】:2014-06-18 07:22:23
【问题描述】:

我对如何在其模型属性上最好地过滤 Backbone 集合有一些疑问。我的设置是这样的:

我有一个包含多个模型的集合。每个模型都有一个包含数字数组(“类型”)的属性。像这样:

- Collection
- model
    - id: 1
    - name
    - phone
    - type [3]
- model
    - id: 2
    - name
    - phone
    - type [2]
- model
    - id: 3
    - name
    - phone
    - type [1,2]

我在这里要做的是能够在模型“type”属性上过滤这个集合。

我有这个“类型”属性,因为这是一个联系人列表,每个联系人可以有多种类型。例如。该集合应该能够在无限类型上进行过滤。您应该能够过滤让我们说类型“1”和类型“2”,然后显示模型 2 和模型 3。因为模型 1 没有“类型”1。

任何好的代码示例或其他帮助都会很棒。谢谢!

【问题讨论】:

    标签: javascript backbone.js filter


    【解决方案1】:

    您可以使用以下代码

    var filColl=myColl.filter(function(o){return _.indexOf(o.get('type'), 1) >-1 })
    

    这是jsFiddle工作代码的链接,带有一些示例数据。

    【讨论】:

    • 嘿!谢谢,这对类型 1 很有用。但我想知道如何让它更有活力?例如,类型有时可以同时是 1 和 2。此过滤在单击事件上运行。所以我想在点击时将类型作为数据属性推送到数组中。然后根据该数组当前持有的类型对其进行过滤。 (将其与集合匹配)
    【解决方案2】:

    您好,这里是可以过滤多种类型的代码,存储在数组中

    var typesTofilter=[5,1,2];//array of type tobe search.
        var f2=friends.filter(function(o){ var accept=false;                                    
                                           $(typesTofilter).each(function(i,val){
                                             if(_.indexOf(o.get('type'), val) >-1){
                                               accept= true;                      
                                                }
                                            })
                                            return accept; 
                             });
    

    这里是jsFiddle

    【讨论】:

    • 谢谢你!干得好。如果我现在想用匹配的结果重置我当前呈现的集合?
    • 没关系。设法弄清楚。这真的很简单,只需使用 collection.reset() 并将新结果传入。还有集合来监听更改事件。
    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多