我有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项它是。
有人可以告诉我如何确保所有项目都被渲染,因为它是不同的项目。
答案 0 :(得分:0)
Meteor只会更新前3个模板,因此不会为这些模板调用。
Blaze render仅针对首次渲染的模板调用。
如果没有提供_id,Blaze Every会为每个使用数组索引 Blaze notes #each 因此,为对象添加具有唯一ID的_id属性将强制使用blaze删除现有项并添加新项。从而解决你的问题