2012-02-02 59 views
1

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

如果有更高效或适当的方式来访问搜索集合数据,请让我知道!

谢谢!

+0

我成功地在我的应用程序中使用visualsearch.js,并且我也有一些麻烦把它编了起来。不过,我不确定要了解您的问题:您不知道如何使用facets输出来过滤收藏夹?你能提供一个例子吗? – 2012-02-02 15:29:07

+0

我熟悉的唯一输出是searchCollection.serialize()方法,但它对我的目的并不是很有用。能够以更像数组的方式访问数据将更加合适。我是全新的JavaScript,所以我可能会缺少一些基础知识......你能详细解释“facet输出来过滤你的集合”吗? – kaspnord 2012-02-02 15:37:32

回答

5

,据我所知有2种方式,从视觉搜索 获取数据它也直接在其文档中的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"}] 
    

    ,你可以看到,此选项给出你的阵列,每将其过滤上小面,和每个资产被输入的值,该值。

+0

谢谢 - 我正在寻找。 – kaspnord 2012-02-02 16:01:52

3

mhmmm ..好吧,答案并不那么简单。我建议你去做一些骨干结构的练习,只是对待办事项列表应用程序进行一些修改。这是一个很好的起点。所以你熟悉一些精彩的backbone.js收藏方法

基本思想如下: 通过visualsearch,你可以获得一个“方面”列表,也就是说一个键/值对象数组。

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

在此之后,你可以使用myFacets元素与_underscore LIB hinerithed精彩filter方法iterativrely过滤收集你。

怎么办?您可以在下划线LIB

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

在这里,您使用Backbone.js的的过滤方法,该方法只返回值,根据您的从句是真正的使用方法_.each。所以,你为每个单一面过滤你的收藏。这就像告诉javascript:“只返回与这个facets(value)相匹配的集合中的元素”,并且你为迭代获得所有不同的方面。

希望这会有所帮助。

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

我建议你看看lib/js/models文件夹中的search_jquery.js文件。这是非常有趣的...

+1

很好的解释 - 谢谢! – kaspnord 2012-02-02 16:56:00