【问题标题】:Query a backbone collection (or json) from a Filter model (or json)从过滤器模型(或 json)中查询主干集合(或 json)
【发布时间】:2013-03-05 17:07:53
【问题描述】:

我正在尝试根据我在 LocationCollection 中的数据呈现谷歌地图。 用户将在模型中定义 filterParameters,这是来自过滤器的 JSON

var filter = {
    "id_ref_type_category":[2,4],
    "pricemin":5,
    "pricemax":15,
    "distmin":10, // meters
    "distmax":150 // meters
}

我需要查询我的收藏,这是我所在位置的 json 示例

var location = [
{
    "id":"1",
    "name":"Sushi 1",
    "price_min":"10",
    "price_max":"20",
    "price_avg":"15",
    "id_ref_type_category":"1",
    "latitude":"48.863831",
    "longitude":"2.356215"
},
{
    "id":"2",
    "description":"Miam ",
    "price_min":"15",
    "price_max":"35",
    "price_avg":"25",
    "id_ref_type_category":"4",
    "latitude":"48.864269",
    "longitude":"2.355153"
},
{
    "id":"3",
    "name":"Restaurant 1",
    "price_min":"5",
    "price_max":"20",
    "price_avg":"12.5",
    "street_number":"60",
    "id_ref_type_category":"1",
    "latitude":"48.863407",
    "longitude":"2.350938"
},
{
    "id":"4",
    "name":"Chez gigi",
    "price_min":"0",
    "price_max":"17",
    "price_avg":"8.5",
    "id_ref_type_category":"2",
    "latitude":"48.861824",
    "longitude":"2.350901"
}
]

关于我的过滤器参数,我正在寻找

  • id_ref_type_category 等于 2 OR 4 的位置
  • 平均价格在 5 和 15 左右的位置
  • 10 到 150 距离内的位置(以米为单位)(如果用户允许地理定位)

我可以使用地理编码http://www.geodatasource.com/developers/javascript这个js函数计算我的位置到该位置的距离

我找了骨干集合过滤但没有找到很多,我找了json查询系统,但找不到任何东西。

我接受任何建议。

【问题讨论】:

    标签: json backbone.js filtering


    【解决方案1】:

    如何为这里的所有属性应用下划线过滤器:

    http://jsfiddle.net/cnDeu/1/

    我已经放松了一点你的过滤器对象,以便一个位置可以通过。

    过滤器基本上是这样的:

    var filtered = loc.filter(function (el) {
        var dist = distance(el.get('latitude'), el.get('longitude'),
                            position.latitude, position.longitude, 'K') / 1000;
    
        return ((el.get('id') == filter.id_ref_type_category[0]) ||
            (el.get('id') == filter.id_ref_type_category[1])) &&
            el.get('price_avg') >= filter.pricemin &&
            el.get('price_avg') <= filter.pricemax &&
            dist >= filter.distmin &&
            dist <= filter.distmax;
    });
    

    【讨论】:

    • 这太棒了,谢谢你为我节省了很多时间。我在看这个插件:github.com/davidgtonge/backbone_query 你的脚本很完美,感谢你的帮助:) 你能告诉我你在哪里找到了关于骨干模型过滤方法的有效文档吗?
    • 嗯,Backbone 将其大部分列表操作功能委托给 Underscore,这是一个用于处理 JavaScript 数组和对象的实用程序库。骨干文档有指向下划线方法的链接:backbonejs.org/#Collection-Underscore-Methods
    • 我确实阅读了下划线过滤文档,但对我来说不够清楚,如果他们有一些在线示例,我会很高兴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2011-09-18
    相关资源
    最近更新 更多