【问题标题】:Meteor reactive search bar with all results when unfocused未聚焦时所有结果的流星反应式搜索栏
【发布时间】:2015-08-18 07:18:35
【问题描述】:
我正在尝试在我的流星项目中实现一个简单的搜索选项,但我从来没有任何使用搜索栏的经验。我的模板当前列出了集合中的所有元素,我希望我的搜索栏以反应方式聚合这些结果。
我已经能够使用简易搜索包获得该结果,但这是我的问题开始的地方。
使用简易搜索,除非我开始在搜索框中输入,否则我无法显示任何结果。外部包的问题是它们真的很难编辑,我不知道如何添加这样的选项或自定义搜索栏。
我已经尝试按照搜索源包进行操作,但该教程针对特定包搜索进行了说明,我不知道如何将其调整为我的项目。
所以再一次。我想在我的列表中添加一个搜索栏,但如果我不使用它,我希望列出所有元素,如果没有任何匹配项,则不列出。
【问题讨论】:
标签:
javascript
mongodb
meteor
【解决方案1】:
查看this meteorpad我整理的。完整代码如下:
client/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>
lib/collections.js:
Foods = new Mongo.Collection('foods');
客户端/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);
}
});
服务器/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'});
}
});