Meteor-简单的搜索问题
Meteor - Simple Search Issues
所以我试图在Meteor中实时搜索一些客户端信息。
我有
Template.userTable.events({
"change #nameSearchBar":function(event){
//console.log(event);
searchText = event.target.value;
filteredUsers = Meteor.users.find({"profile.name":{$regex: (".*"+searchText+".*") } });
console.log(filteredUsers.fetch());
}
});
在我的js和中
Template.userTable.helpers({
usersOnline: function() {
return filteredUsers;
}
});
同样。我可以看到filteredUsers在控制台日志中得到了更新,但我没有得到列出usersOnline的html的实时更新——相反,我只是通过调用filteredUsers=Meteor.users.find().来获得所有这些用户,这就是usersOnline初始化的目的
如何获得所需的实时更新?
您的filteredUsers
变量不是反应性的,因此当它发生更改时,没有任何内容告诉usersOnline
助手重新运行。我认为你可以用两种方法之一:
-
使用ReactiveVar。无可否认,我对它们没有太多经验,但我认为你可以将ReactiveVar分配为模板的一部分,然后让它观察——类似于:
Template.userTable.created = function() { this.data.filteredUsers = new ReactiveVar(...) // initialize this to whatever } Template.userTable.helpers({ usersOnline: function() { return this.filteredUsers.get(); // pulling from the reactive var rather than a static var } }); Template.userTable.events({ "change #nameSearchBar":function(event){ searchText = event.target.value; // Setting the reactive var should invalidate the "get" in the helper and trigger re-run filteredUsers.set(Meteor.users.find({"profile.name":{$regex: (".*"+searchText+".*") } })); } });
-
使用Session变量——非常相似,但它可以全局访问,而不是在该Template上设置。默认情况下,所有会话变量都是被动的:
Template.userTable.created = function() { Session.setDefault('filteredUsers', ...) // initialize this to whatever } Template.userTable.destroyed = function() { Session.set('filteredUsers', null); // clean up after yourself when you navigate away } Template.userTable.helpers({ usersOnline: function() { return Session.get('filteredUsers'); // pulling from Session var, which is reactive } }); Template.userTable.events({ "change #nameSearchBar":function(event){ searchText = event.target.value; // Setting the Session var should invalidate the "get" in the helper and trigger re-run Session.set('filteredUsers', Meteor.users.find({"profile.name":{$regex: (".*"+searchText+".*") } })); } });
正如我所说,我在ReactiveVars方面做得不多,但我认为从技术上讲,#1是更好的选择,所以我会先考虑一下。
您还可以在Session变量中定义搜索文本,当该变量发生变化时,显示新结果。
类似这样的东西:
Session.setDefault('searchText', null);
Template.userTable.events({
"change #nameSearchBar":function(event){;
searchText = event.target.value;
Session.set('searchText', searchText);
}
});
Template.userTable.helpers({
usersOnline: function() {
if(Session.get('searchText') == null){
return Meteor.users.find();
} else {
var searchText = Session.get('searchText');
return Meteor.users.find({"profile.name":{$regex: (".*"+searchText+".*") } });
}
}
});
相关文章:
- 在javascript中调用自定义谷歌搜索标签时出现问题
- 是否有其他人在设计Twitter Typeahead时遇到问题'的搜索栏
- Meteor-简单的搜索问题
- 使用 jQuery UI 折叠面板显示 couchDB 数据库搜索结果时出现问题
- 为了在列表中搜索,角度过滤器有问题
- 如何解决区分大小写搜索的搜索输入问题
- 搜索输入问题显示滚动
- UIWeb查看搜索问题中出现的下一个单词
- 多个谷歌自动完成和地点搜索问题
- 谷歌语音识别搜索文本问题
- 日历和快速搜索的 Jquery 冲突问题
- 数据表 FNFILTER 搜索问题
- 排查 Chrome 搜索扩展程序问题
- 简单搜索结果页面:if/else 使用 localStorage 变量和 document.write 时出现问题
- AJAX 自动完成列表在搜索词更改时更新时出现问题
- 弹性搜索搜索过滤器等于问题
- 点击显示按钮并在关闭时隐藏搜索字段时出现问题
- 什么'我的JavaScript搜索递归循环有问题
- 输入中的ngBlur和该输入框中搜索的列表项目之间的问题
- 我的JavaScript代码有什么问题?(搜索栏)