我有兴趣在我的网站上使用visualsearch.js控件,但是通过阅读文档后,我仍然不清楚如何有效地获取输出搜索集合数据。基于该示例,输出字符串通过搜索集合的序列化来构造。但是,我想知道是否有一种方法可以以更像数组的方式访问搜索集合(以便可以使用for / in循环),而不必解析单个序列化字符串。最终,我需要从搜索集合数据构建SQL查询。
如果有更有效或更恰当的方式来访问搜索集合数据,请告诉我们!
谢谢!
答案 0 :(得分:5)
据我所知,有两种方法可以从视觉搜索中获取数据 它也在usage #4
的文档中直接解释就像你说的那样,是搜索的字符串化版本。
visualSearch.searchBox.value();
// returns: 'country: "United States" state: "New York" account: 5-samuel title: "Pentagon Papers"'
或要遍历的分面对象
visualSearch.searchQuery.facets();
// returns: [{"country":"United States"},{"state":"New York"},{"account":"5-samuel"},{"title":"Pentagon Papers"}]
如您所见,此选项为您提供了一个数组,每个已经过滤的方面,以及每个资产输入的值。
答案 1 :(得分:3)
基本理念如下: 使用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文件。这很有意思......