0

我正在尝试实现一个 VisualSearch.js 查询框,可用于搜索特定对象的属性。VisualSearch.js 提供了可以有类别的 Facets,但有人知道我可以为模型名称加载一个 facet 的方法。例如“用户”)然后一旦点击/选择加载第二个子 facet 之前的属性列表让用户有机会最终点击将通过 JSON 调用加载的值。我已经搜索并找不到任何对此类功能的引用,但我可能只是使用了不正确的术语“Sub Facet”。

这是我一直在玩的 JSFiddle。 http://jsfiddle.net/Savvy84/HRuAP/13/

var visualSearch = VS.init({
    container: $('#visual_search'),
    query: '',
    callbacks: {
        search: function(query, searchCollection) {},
        facetMatches: function(callback) {
            callback([
                {
                value: 'user.email',
                label: 'users.email',
                category: 'Users'},
                 {
                value: 'job.name',
                label: 'job.name',
                category: 'Jobs'},
                 {
                value: 'job.startDate',
                label: 'job.startDate',
                category: 'Jobs'}
            ]);
        },
        valueMatches: function(facet, searchTerm, callback) {
            if (searchTerm.length > 0) {
                //pass the facet to the search and let the server deal with it.
                switch (facet) {
                case 'user.email':
                    callback([
                        {
                        label: 'john.smith@example.com'},
                           {
                        label: 'jane.doe@example.com'}
                        ]);
                        break;
                }
            }
        }
    } });

非常感谢。

4

2 回答 2

0

阅读完源代码后,我可以看到要创建这个功能,我必须派生 VisualSearch.js 并编辑它的一些类。

http://documentcloud.github.com/visualsearch/docs/search_facet.html

于 2012-11-14T13:28:13.450 回答
0

可能我现在回答这个问题太晚了,但它可能对某些人有所帮助。我同意@andrewsavil 的观点,即您需要修改视觉搜索库本身。

您需要将以下代码添加到 setupAutocomplete 函数内的 search_facet.js 文件中:-

// Renders the results grouped by the categories they belong to.
this.box.data('uiAutocomplete')._renderMenu = function(ul, items) {
    var category = '';
    _.each(items, _.bind(function(item, i) {
      if (item.category && item.category != category) {
        ul.append('<li class="ui-autocomplete-category">'+item.category+'</li>');
        category = item.category;
      }

      if(this._renderItemData) {
        this._renderItemData(ul, item);
      } else {
        this._renderItem(ul, item);
      }

    }, this));
  };
于 2014-12-24T13:16:59.067 回答