我们如何使用visualsearch.js的输出?

时间:2012-02-02 15:03:54

标签: javascript backbone.js

我有兴趣在我的网站上使用visualsearch.js控件,但是通过阅读文档后,我仍然不清楚如何有效地获取输出搜索集合数据。基于该示例,输出字符串通过搜索集合的序列化来构造。但是,我想知道是否有一种方法可以以更像数组的方式访问搜索集合(以便可以使用for / in循环),而不必解析单个序列化字符串。最终,我需要从搜索集合数据构建S​​QL查询。

如果有更有效或更恰当的方式来访问搜索集合数据,请告诉我们!

谢谢!

2 个答案:

答案 0 :(得分:5)

据我所知,有两种方法可以从视觉搜索中获取数据 它也在usage #4

的文档中直接解释
  1. 就像你说的那样,是搜索的字符串化版本。

    visualSearch.searchBox.value();
    
    // returns: 'country: "United States" state: "New York" account: 5-samuel title: "Pentagon Papers"'
    
  2. 或要遍历的分面对象

    visualSearch.searchQuery.facets();
    
    // returns: [{"country":"United States"},{"state":"New York"},{"account":"5-samuel"},{"title":"Pentagon Papers"}]
    

    如您所见,此选项为您提供了一个数组,每个已经过滤的方面,以及每个资产输入的值。

答案 1 :(得分:3)

嗯,好吧,答案不是那么简单。我建议你通过骨干结构进行一些练习,只需对todo-list应用程序进行一些修改。这是一个很好的起点。因此,您熟悉了一些精彩的backbone.js集合方法

基本理念如下: 使用visualsearch,您可以获得“facet”列表,也就是说一组键/值对象。

 var myFacets = visualSearch.searchQuery.facets();
 //my facets is then something like [{"field1":"value1-a"},{"field2":"value2-c"}]

在此之后,您可以使用myFacets元素使用从filter lib hinerithed的WONDERFUL _underscore方法迭代过滤您的集合。

怎么做?您可以在下划线库中使用_.each方法

    _.each(myFacets,function(facet){
                myCollection=myCollection.filter(function(item){
                    return item.get(facet.get('category')) == facet.get('value');
                    });
                });
            }

这里使用backbone.js的filter方法,它只根据你的子句返回值为true。因此,您为每个方面过滤一次集合。这就像告诉javascript:“只返回与此facet(value)匹配的集合元素”,然后对所有不同方面进行迭代迭代。

希望这有帮助。

啊..最后一件事,只是为了弄乱想法:-):Visualsearch建立在backbone.js上,而searchQuery对象只不过是一个骨干集合,所以你可以使用基本的方法和属性骨干集合。如果不清楚,请再次阅读此行,因为这可能是未来实施的关键点! : - )

我建议您查看lib / js / models文件夹中的search_jquery.js文件。这很有意思......