【问题标题】:Meteor:search-source doesn´t clear the searchMeteor:search-source 不清除搜索
【发布时间】:2016-03-31 23:34:12
【问题描述】:

我在使用 Meteor Search-source 时遇到了一些问题。包装工作正常,但我认为它在文档中有很大的漏洞。我现在的问题是,当我不在搜索字段中输入任何内容时,我无法清除搜索。 目前该应用程序显示网站列表。如果我在搜索字段中寻找一些网页,应用程序会显示一个包含结果的列表。但是当我删除字段文本中的字符(空搜索)时,结果列表不会消失。它显示完整的元素列表,而不是显示一个空列表。 我尝试了很多解决方案,但没有任何效果...... 您可以在我的应用程序的搜索字段中测试输入例如“coursera”,然后删除所有类型以检查它。

有什么建议吗?非常感谢提前

My App

服务器

    SearchSource.defineSource('items', function(searchText, options) {
      var options = {sort: {upvote: -1}, limit: 20};
      // var options = options || {};

    if(searchText) {
      var regExp = buildRegExp(searchText);
      /*var selector = {title: regExp, description: regExp};*/
       var selector = {$or: [
      {title: regExp},
      {description: regExp}
    ]};
      return Websites.find(selector, options).fetch();
  } else  {
      return Websites.find({}, options).fetch();

   }

 });

 function buildRegExp(searchText) {
     var words = searchText.trim().split(/[ \-\:]+/);
     var exps = _.map(words, function(word) {
    return "(?=.*" + word + ")";
  });
  var fullExp = exps.join('') + ".+";
  return new RegExp(fullExp, "i");
}

客户

//search function

var options = {
  keepHistory: 1000 * 60 * 5,
  localSearch: true
};

var fields = ['title','description'];

itemSearch = new SearchSource('items', fields, options);

//end search function



//search helper

Template.searchResult.helpers({

   getItems: function() {
    return itemSearch.getData({
        transform: function(matchText, regExp) {
            return matchText.replace(regExp, "$&")
            },
      sort: {upvote: -1}
    });
  },

  isLoading: function() {
    return itemSearch.getStatus().loading;
    }
});

// search events 

Template.searchBox.events({

      'keyup #search-box': _.throttle(function(e) {
        var text = $(e.target).val().trim();
        console.log(text);
        itemSearch.search(text,{}); 
      }, 200)
    });

HTML

<template name="searchResult">
    <div class="container">
        <div class="jumbotron searchResult">    
            <h3> Search results </h3>
                <ol>
                    {{#each getItems}}
                        {{> website_item_search}}       
                    {{/each}}
                </ol>
            <!--<div id="search-meta">
                {{#if isLoading}}
                    searching ...
                {{/if}}
            </div>-->
        </div>  
    </div>
</template> 

【问题讨论】:

  • 如果searchText 为空,您是否尝试过返回空数组(或null)?

标签: javascript search meteor meteor-helper


【解决方案1】:

只需更改服务器文件上的代码,您应该能够在空白文本字段上看不到任何结果。

这是新代码。 https://github.com/ashish1dev/search_source_example

SearchSource.defineSource('packages', function(searchText, options) {
    var options = {sort: {isoScore: -1}, limit: 20};

    if(searchText.length>=1) {
        var regExp = buildRegExp(searchText);
        var selector = {$or: [
            {packageName: regExp},
            {description: regExp}
        ]};

    return Packages.find(selector, options).fetch();
  } else if (searchText.length===0){ 
        return [];// return blank array when length of text searched is zero
  } 
  else {
        return Packages.find({}, options).fetch(); 
  }
});

【讨论】:

  • 太棒了!我是新手程序员,目前对我实现一些逻辑操作有点困惑......如果喜欢你的解决方案,我也尝试实现一个新的 else,但我的问题是我不知道如何返回一个空数组... 谢谢你的提示!!我爱流星;)
  • 流星快乐! :-)
猜你喜欢
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多