Meteor:collectionHandle.ready()为true后,如何触发helper函数的reRun
Meteor: How to trigger reRun of helper function after collectionHandle.ready() is true
这是我旧问题的新版本:
因此,多亏了Tom Coleman的帮助,我终于学会了如何正确检查订阅是否准备好了()。
我当前的代码结构如下:
/client/app.js:
eventsHandle = null;
groupsHandle = null;
// ...
// First Deps.autorun():
// Does not depend on any Session var, should just run every time
Deps.autorun(function() {
eventsHandle = Meteor.subscribe("events", function() {
console.log('Deps.autorun(): Events loaded');
});
});
// Second Deps.autorun():
// contains all subscriptions which are dependent on my Session var "ehash"
Deps.autorun(function() {
if(Session.get('ehash'))
groupsHandle = Meteor.subscribe("groups", Session.get('ehash'), function() {
console.log('Deps.autorun(): Groups loaded with ehash: ' + Session.get('ehash'));
});
});
// ...
然后,我在一个名为:的文件夹中为所有模板内容创建了视图特定的.js和.html文件
/client/views/
--> <page>.js:
Template.x.dataLoaded = function() {
if(Session.get('ehash'))
if(eventsHandle && groupsHandle && eventsHandle.ready() && groupsHandle.ready()) {
console.log('All data loaded!');
singleevent = Events.find({ehash: Session.get('ehash')}).fetch()[0];
return true;
}
}
这个助手dataLoaded
基本上将所有内容都封装在相应的模板中,并在dataLoaded
返回true或显示加载微调器时显示内容。
问题是,在许多情况下,这是不起作用的,因为这个dataLoaded代码只运行一次。因此,如果在运行dataLoaded时两个句柄未就绪(),则内容将永远不会显示。在这种情况下,我仍然可以看到所有console.log来自app.js文件(Deps.autorun()的东西),但日志"all data loaded!"从未被echod。
所以我的问题是:我如何触发重新运行此代码,以便再次运行dataLoaded
,以便内容最终显示出来?
向致以最良好的问候
只需创建一个依赖项即可解决问题:
var _dep = new Deps.Dependency();
Template.x.dataLoaded = function() {
_dep.depend();
...
}
function handler() {
... do.stuff();
_dep.changed();
}
现在,每次运行_dep.changed()
方法时,助手都会重新运行。易于理解的
要调用eventHandle
的ready()
方法,您需要括号,否则我认为您只是在检查ready方法是否存在。关于这一点的讨论就在这里。
如果在javascript的不同部分将eventHandle
设置为不同的订阅句柄,这可能仍然会给您带来问题。请尝试按此处所述构建应用程序的文件。
是的,您需要手动调用this.ready()
。请参阅文档中的示例。
这看起来比实际情况更复杂。我很可能遗漏了一些东西,但在我看来,你只是想在加载数据时设置一个加载微调器。我在Meteor中发布了一种简单、可读性更强的显示"加载"的方式。
- 如何在未直接触发的情况下停止事件
- Jquery:未触发select事件
- ASP.NET通过单击JavaScript按钮触发c#事件
- Jquery隐藏未触发
- JSONP请求返回结果,但也触发error_callback
- 使用特定键在keydown时触发事件
- 未能从后端触发javascript
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 为什么我的点击事件没有使用 react js 触发
- node.js请求数据事件未在CORS ajax调用中触发
- 触发媒体查询断点时刷新页面
- 为什么此警报框不't被触发了?在这里追鬼
- JavaScript-动态SVG-onload属性-未触发事件
- 是否可以为HTML5输入滑块触发oninput事件
- 在IE8中不起作用的元素上触发单击事件
- 添加类来触发jquery函数
- 如何在不单击javascript中的按钮的情况下触发事件
- onChange不足以从Dojo组合框触发查询
- Meteor:collectionHandle.ready()为true后,如何触发helper函数的reRun
- 如何在使用Javascript单击按钮时触发HTML helper