流星/砌体:等待所有模板渲染

时间:2015-06-02 22:27:45

标签: javascript meteor masonry

这个问题有点类似于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>

2 个答案:

答案 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:确保在渲染所有项目时确实需要触发此操作,或者通过划分并在较小的问题中解决问题(例如,针对每个项目)来实现更好更容易的解决方案