我想在Meteor中实现基于参数的发布,但我遇到了一些问题.
这就是我所拥有的.
当用户键入订阅发布的keyup事件并传递输入的值时.
'keyup #customerSearch': function(event, template){
var keyword = template.find('#customerSearch').value;
if(keyword){
if(keyword.length >= 3){
Meteor.subscribe('sessioncustomers', keyword);
}
}
}
Run Code Online (Sandbox Code Playgroud)
该发布使用此关键字返回记录.
Meteor.publish("sessioncustomers", function(keyword){
if(keyword ){
if(keyword.length >= 3){
query.name = new RegExp(regExpQuoted(keyword), 'i' );
Customers.find(query);
} else {
return null;
}
}else{
return null;
}
});
Run Code Online (Sandbox Code Playgroud)
问题.除了客户端更改关键字之外,或者当关键字更改时,发布会发布与关键字匹配的其他文档,但客户端集合永远不会删除旧文档,否则它将起作用并接收文档.
如何获取不再与客户端集合匹配的旧文档?
我认为,因为订阅的参数已经改变,不匹配的文档将被取消订阅,并且只订阅新的匹配文档.
在您的keyup回调中,您需要"取消订阅"以前的出版物,否则您将保留旧文档.
var sessionCustomersHandler = false;
'keyup #customerSearch': function(event, template) {
var keyword = template.find('#customerSearch').value;
if (keyword && keyword.length >= 3)
var newSessionCustomersHandler = Meteor.subscribe('sessioncustomers', keyword);
if (sessionCustomersHandler)
sessionCustomersHandler.stop();
sessionCustomersHandler = newSessionCustomersHandler;
}
Run Code Online (Sandbox Code Playgroud)
此外,check(keyword, String)为了安全起见,请不要忘记在您的发布功能中.
Meteor.publish("sessioncustomers", function(keyword){
check(keyword, String)
if (keyword.length >= 3)
return Customers.find({
name: new RegExp(regExpQuoted(keyword), 'i' )
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6235 次 |
| 最近记录: |