这个问题有点类似于Meteor : wait until all templates are rendered,但我再次提出这个问题,因为它似乎没有得到回答,我会解释原因。
拥有以下模板代码
<template name="home">
<div>
<ul>
{{#each this}}
{{> item}}
{{/each}}is ready
</ul>
</div>
</template>
<template name="item">
<li><img src="{{amz-picture-url}}"></li>
</template>
我想在所有&#34;项目&#34;之后执行一次代码。是呈现。其中有许多方法,我尝试了许多方法,例如onRendered
,将铁路由器waitOn
添加到主页模板,jQuery的imagesLoaded函数尝试等待图像...
上一个问题中接受的答案使用铁路由器等待数据准备就绪,但我确实需要渲染子模板,除了准备好的数据之外,我需要这个来调用Masonry。
在这个Meteor用例中是否有一种可靠的方式使用Mansory,或者我应该改变我完全使用的方法,因为在这种情况下,Mansory无法在适当的时刻被调用?< / p>
答案 0 :(得分:1)
您可以向onload
添加一个<img>
事件处理程序来计算调用次数。一旦达到项目数,就完成了。
类似的东西:
<template name="item">
<li><img src="{{amz-picture-url}}" onload="countImages()"></li>
</template>
然后在js:
var imageCounter = 0;
function countImages() {
if(++imageCounter == this.length) {
// Do whatever you need
}
}
答案 1 :(得分:0)
一旦所有项目都被加载,你就无法真正执行代码,因为理论上你的客户的项目是无限的。 这就是原因:
Meteor利用套接字连接在后台实时更新其minimongo(浏览器中的本地mongodb)。所以你永远不知道你是否真的拥有服务器上的所有项目。它仍然会收到更新/删除或新项目。
要解决此问题,您可以试试这个
1。)确保您的订阅为ready,并附带回调
2。)如果您的订阅已准备好计算您的minimongo中的商品,则触发一项功能
3。)使用此total_count并检查其等于您的渲染项目数。
btw:确保在渲染所有项目时确实需要触发此操作,或者通过划分并在较小的问题中解决问题(例如,针对每个项目)来实现更好更容易的解决方案