流量反应搜索栏,在未聚焦时显示所有结果

Mar*_*ski 2 javascript mongodb meteor


我正试图在我的流星项目中实现一个简单的搜索选项,但我从来没有任何搜索栏的经验.我的模板目前列出了一个集合中的所有元素,我希望我的搜索栏可以反应性地聚合这些结果.

我已经能够通过简单的搜索包实现这一结果,但这是我的问题开始的地方.
使用简单搜索,除非我开始在搜索框中输入,否则无法显示任何结果.外部包的问题在于它们真的很难编辑,我不知道如何添加像这样的选项或自定义搜索栏.

我已经尝试过关注搜索源包,但教程是针对特定的包搜索解释的,我不知道如何将其调整到我的项目.

再一次.我想在我的列表中添加一个搜索栏,但是如果我没有使用它,我希望列出所有元素,如果没有任何匹配则不需要.

ffx*_*sam 7

看看我放在一起的这个meteorpad.完整代码如下:

客户机/ main.html中:

<body>
  {{> main}}
</body>

<template name="main">
  <div><input id="search" placeholder="Search"></div>

  {{> foodList}}
</template>

<template name="foodList">
  <ul>
    {{#each foods}}
      <li>{{name}}</li>  
    {{/each}}
  </ul>
</template>
Run Code Online (Sandbox Code Playgroud)

LIB/collections.js:

Foods = new Mongo.Collection('foods');
Run Code Online (Sandbox Code Playgroud)

客户机/ app.js:

Template.foodList.helpers({
  foods: function () {
    var regexp = new RegExp(Session.get('search/keyword'), 'i');
    return Foods.find({name: regexp});
  }
});

Template.main.events({
  'keyup #search': function(event) {
    Session.set('search/keyword', event.target.value);
  }
});
Run Code Online (Sandbox Code Playgroud)

服务器/ app.js:

Meteor.startup(function() {
  if (Foods.find().count() === 0) {
    Foods.insert({name: 'Blueberries'});
    Foods.insert({name: 'Strawberries'});
    Foods.insert({name: 'Steak'});
    Foods.insert({name: 'Eggs'});
  }
});
Run Code Online (Sandbox Code Playgroud)