为什么当父块中的不相关字段更改时,with/each块中的所有Meteor模板帮助程序都被调用?
在Meteor templates中使用#with块时,如果我在块的最外层逻辑部分编辑单个字段,它仍然会导致再次调用#with块中的所有模板帮助程序。这也适用于每个人。为了证明这一点,我上传了一个项目到github。可在以下网址找到: 如果下载并运行该项目,您将看到一个呈现以下内容的页面:为什么当父块中的不相关字段更改时,with/each块中的所有Meteor模板帮助程序都被调用?,meteor,meteor-blaze,Meteor,Meteor Blaze,在Meteor templates中使用#with块时,如果我在块的最外层逻辑部分编辑单个字段,它仍然会导致再次调用#with块中的所有模板帮助程序。这也适用于每个人。为了证明这一点,我上传了一个项目到github。可在以下网址找到: 如果下载并运行该项目,您将看到一个呈现以下内容的页面: 项目所有者(字段为firstName和lastName) 项目(字段为名称和类型) 每个项目的任务(字段为projectId、name和estimate) 在默认数据集中,有一个项目所有者、两个项目和两
- 项目所有者(字段为firstName和lastName)李>
- 项目(字段为名称和类型)李>
- 每个项目的任务(字段为projectId、name和estimate)
这是虫子吗?或者这是一个有明显/不明显解决方法的功能?好吧,我解决了这个问题。在进入细节之前,应该说Meteor已经选择实现数据模板帮助程序,以便在父数据上下文中进行任何更改时重新运行。为什么?我还是不确定。(等待答复)。同时,我意识到,如果数据上下文文档的更改可以触发一整套重新运行,那么最好的做法是从数据上下文中删除可更改的信息。我已经在github上更新了我的项目(链接在问题中),以反映这一点 模板以前看起来像
projecttemplate.html
<template name="projectTemplate">
{{#with ownerProjectId}}
{{#with ownerProjectData}}
{{fullName}}
{{/with}}
{{#each multiProject}}
{{#with singleProjectData}}
<h3>Here is the {{this.name}}</h3>
<p>And this is the {{type}}</p>
<p>And here they are combined: {{nameType}}</p>
<p>And these are the tasks associated with it </p>
{{/with}}
{{> tasksTemplate}}
{{/each}}
{{/with}}
</template>
此模板更改了数据上下文。它没有使用完整的项目所有者对象,而是只使用该所有者的Id。为了显示所有者的属性,使用了一个绑定到名为ownerProjectData的模板帮助器的。ownerProjectData助手根据id获取OwnerProject对象并返回它。这有助于将项目所需的数据与不需要的数据分开 此模式将再次应用于项目上的每个绑定。我没有使用完整的项目模型,而是只使用项目id字段,这是任务真正需要的全部内容。对于需要显示项目信息的区域,我再次使用了一个助手,该助手根据循环中每个迭代传递的Id获取完整的项目模型 我遇到的一个非常重要的特点是,无论在我添加项目时是否会调用全部重新运行的帮助程序,建模数据都会发生变化。在插入新项目会导致完全重新运行时,OwnerProject数据文档如下所示:
{
OwnerProject:
_id: "ownersautoassignedid"
firstName: "some",
lastName: "example",
projects:[
"idofproject1","idofproject2"
]
}
在本例中,OwnerProject保留了对她拥有的所有项目的引用。如果我在她的下面添加了一个新项目,我会插入该项目,获取其id,然后更新所有者。但是,这将导致所有帮助程序完全重新运行。相反我从所有者中删除了projects属性,并更改了项目结构以引用所有者id。在模板端,我通过选择所有者id等于superTemplate上下文id的位置来获取项目id。这次插入新项目时,仅调用新项目的模板帮助器,而另一个模板帮助器项目未受影响
给你。这是一个很长的答案,描述了一个非常简单的问题解决方案,如果您遵循meteor的标准文档,您肯定会遇到这个问题。希望这对将来有所帮助
不要忘记查看github项目中的源代码,并检查提交历史记录和github问题。它会描述我是如何来到这里的
{
OwnerProject:
_id: "ownersautoassignedid"
firstName: "some",
lastName: "example",
projects:[
"idofproject1","idofproject2"
]
}