【发布时间】:2014-09-10 11:52:47
【问题描述】:
我正在处理一个有两条路径的编辑表单。一种是用户单击“新建”按钮时,另一种是用户单击“编辑”时。
当他们单击“新建”时,代码将 form_id 会话变量设置为 null 并将 client_id 会话变量设置为 null,然后执行 Router.go('formEdit') 以加载 formEdit 模板/路由。
在 formEdit.js 中,我做了一个响应式模板帮助器(我认为这就是它们的名称,但无论如何),如下所示:
Template.formEdit.form = function() {
var form;
if (Session.equals('form_id', null)) {
// Create empty form
form = {
title: null,
client_id: Session.get('client_id'),
header_fields: [],
form_fields: []
};
} else {
// Load form
form = Forms.findOne({_id: Session.get('form_id')});
}
return form;
}
基本上我会检查是否设置了form_id,如果是,我会从 Forms 集合中加载它,如果没有,我会创建一个空白集合。我认为这会很简单,真的。
问题是创建/找到的form 对象的行为不是“反应性”的。如果我添加header_fields 或form_fields,则后续模板代码永远不会更新。两者都在{{#each}} 中,如下所示:
<template name="formEdit">
...
{{#each header_fields}}
{{> headerFieldOutput}}
{{/each}}
...
{{#each form_fields}}
{{> formFieldOutput}}
{{/each}}
</template>
如何使我可以将header_fields 和form_fields 推送到表单上并让基础模板响应式更新{{#each}}?
【问题讨论】:
标签: meteor