Meteor childtemplate渲染事件不会在每个循环中第一次调用

时间:2014-05-07 13:47:57

标签: meteor

我有3件物品。当我尝试渲染所有这些项目。呈现的事件仅在最后一次调用。第一次没有触发事件。有人可以帮帮我吗?问题出在第5行,即仅执行2次而不是3次。我使用的是流星版本0.8.1。

var tryCount = 0;

Template.singleaction.rendered = function(){
    var originalContext = this;
    console.log("Rendered event fired");
    var ensureExecution = function(){
        if (originalContext.$('.formtemplate-' + originalContext.data.action).length < 1 && tryCount < 10){
            setTimeout(ensureExecution, 200);
            tryCount++;
        }
        else{
            if (originalContext.data){
                var formtemplate = FollowupImplementationController.getActionTemplate(originalContext.data);
                if (formtemplate){
                    var entity = FollowupImplementationController.getCurrentEntity();
                    var toInject = UI.renderWithData(Template[formtemplate], entity);
                    UI.insert(toInject, originalContext.$('.formtemplate-' + originalContext.data.action)[0]);
                }
            }
            tryCount = 0;
        }
    }
    ensureExecution();
}

在父模板的代码下面

<template name="followupimpactions">
    <legend>Acties:</legend>
    <ol id="actions">
        {{#each actions}}
        {{>singleaction}}
        {{/each}}
    </ol>
</template>

在子模板的代码下面。

<template name="singleaction">
    <li>
        {{displaytext}}
        <div class="formtemplate-{{action}}">

        </div>
    </li>
</template>

UPDATE !!! 我发现只有当我切换项目时才会发生这种情况。我已经解决了这个问题。完整代码可以在http://pastebin.com/Jsw4AzFN上看到,示例可以在http://isolation.meteor.com/上访问。

可以通过转到控制台并调用SwitchItems()来重现行为,在那里您将看到对于item4,5,6,渲染的回调不再被触发,但对于第7项它是。

有人可以告诉我如何确保所有项目都被渲染,因为它是不同的项目。

1 个答案:

答案 0 :(得分:0)

Meteor只会更新前3个模板,因此不会为这些模板调用。

Blaze render仅针对首次渲染的模板调用。

如果没有提供_id,Blaze Every会为每个使用数组索引 Blaze notes #each 因此,为对象添加具有唯一ID的_id属性将强制使用blaze删除现有项并添加新项。从而解决你的问题