首先,感谢DocumentCloud的人发布这两个超级有用的工具。
这是我的问题:
我正在尝试在backbone.js app中使用visulasearch.js。
在我的应用程序中,我有一个基本的index.html和一个myapp.js javascript文件,其中包含使用backbone.js完成的主要应用程序
我使用CouchDB作为数据存储,并且我成功地可以以一种安静的方式检索要放入集合中的所有数据。
我必须检索visualsearch.js给出的搜索查询并使用它来过滤集合
我肯定需要一个搜索框的视图,当命中输入时触发一个事件,但是..
我应该在另外的js文件或我的index.html页面(如visualsearch mini.tutorial中所建议的)在myapp.js外部初始化搜索框吗? 或者我应该在搜索框视图(myapp.js)中初始化它?后一种解决方案似乎太棘手了(这是我试图做的,但即使我成功了,它太复杂了,我也失去了bacbone mvc的简单性。)
假设我成功将搜索字符串检索为{name:'Fat DAvid', address:'24, slim st', phone:'0098876534287'}
等JSON对象。完成后,我可以使用哪个函数在集合中检索其字段与给定字符串匹配的模型。我知道我应该做一个地图或过滤器,但这些功能似乎本身就可以用于稍微不同的任务。
一个。它真的是过滤结果的最佳方式吗?它向客户端收费(必须过滤结果),而对CouchDB进行新的查询(视图或过滤器)会非常简单,并且考虑到少量数据和对站点的低访问率,而不是那么昂贵。但是,在客户端进行所有过滤操作,它比在CouchDB中创建新视图(或列表或过滤器)并将其链接到backbone.js视图要简单得多
答案 0 :(得分:1)
您可以在myapp.js中初始化您的VisualSearch.js搜索框。只需确保保留对它的引用,以便稍后可以提取出构面和值。
例如:
var visualSearch = VS.init({...})
// Returns the unstructured search query
visualSearch.searchBox.value()
// "country: "South Africa" account: 5-samuel title: "Pentagon Papers""
// Returns an array of Facet model instances
visualSearch.searchQuery.facets()
// [FacetModel<country:"South Africa">,
// FacetModel<account:5-samuel>,
// FacetModel<title:"Pentagon Papers">]
如果您在Backbone集合中使用这些模型,则可以轻松执行过滤:
var facets = visualSearch.searchQuery.models;
_.each(facets, function(facet) {
switch (facet.get('category')) {
case 'country':
CountriesCollection.select(function(country) {
return country.get('name') == facet.get('value');
});
break;
// etc...
}
});