所以我在Deps.autorun订阅,我想跟踪订阅何时仍在加载文档以及何时完成或“准备好”。
我想在Meteor.Subscribe方法返回的句柄上使用.ready()函数作为把手助手中的被动数据源。这适用于第一次订阅。但是当Deps无效并且重新运行订阅时,不会重新运行把手模板。
我认为这是因为订阅句柄上的.ready()没有得到验证。换句话说,为把手助手创建的依赖关系是在旧的.ready()被动元素上,当重新运行Deps.autorun并重新设置订阅时,会有一个新的句柄,并且把手助手不依赖于这个新的.ready()函数。
我的解决方法是在Deps.autorun中创建一个设置为false的会话变量,然后将onReady回调函数传递给订阅,该订阅将该会话变量设置为true。
这是我的原始代码,仅适用于第一个订阅。
var searchResultsHandle = null;
Deps.autorun(function () {
searchResultsHandle = Meteor.subscribe("searchResults", Session.get('searchQuery'));
});
Handlebars.registerHelper("searchResultsLoaded", function() {
return searchResultsHandle && searchResultsHandle.ready();
});
我的解决方法:
var searchResultsHandle = null;
Deps.autorun(function () {
Session.set('searchResultsLoaded', false);
searchResultsHandle = Meteor.subscribe("searchResults", Session.get('searchQuery'), function(){
Session.set('searchResultsLoaded', true);
});
});
Handlebars.registerHelper("searchResultsLoaded", function() {
return Session.equals('searchResultsLoaded', true);
});
这是解决问题的正确方法吗?有没有办法继续使用.ready()函数作为响应数据源并以这种方式重新订阅?