Meteor:如果上下文存在,则在模板内设置上下文

时间:2015-04-04 12:31:08

标签: templates meteor routes

我遇到的问题是,我想为/edit/:id路由和/add路由呈现相同的表单模板。后者应该为表单提供空输入,第一个应该使用对象的现有属性填充输入字段,让我们说它是一个帖子。

保持干燥我不想将模板粘贴到新模板中。

为实现这一目标,我做了以下工作:

<template name="addOrEditPost">
  {{#if this.post}}
    {{#with this.post}}
  {{/if}}
  <form>
    <input type="text" value={{#if name}}{{name}}{{/if}} ...>
    ...
  </form>
  {{#if this.post}}
    {{/with}}
  {{/if}}
</template>

我的想法是,只为模板提供一个上下文,如果上下文本身存在(如果它存在,我们就会编辑&#39;如果没有,我们会在&中#39;添加&#39;。)

但这会导致

=> Errors prevented startup:

While building the application:
client/views/admin/addPost.html:6: Expected tag to close with, found if
...{#with this.post}}   {{/if}}   <form id="...
^

那么如何在不重复整个模板和表单的情况下实现这一目标呢?提前谢谢!

修改

我必须提到它没有{{with}} - 上下文:当我写

<input type="text" value={{#if this.post.name}}{{this.post.name}}{{/if}} ...>

它正在运作。但是,由于表单有大约50个输入字段,因此上下文会更清晰......

1 个答案:

答案 0 :(得分:0)

好的,我想出了一个我自己的解决方案:

<template name="addOrEditPost">
  {{#if this.post}}
    {{> form this.post}}
  {{else}}
    {{> form}}
  {{/if}}
</template>

如果有帖子,我可以在{{whatever}} - 模板中使用form调用其属性,因为this.post作为参数传递给模板并作为其上下文。< / p>

如果您有任何想法如何改善这一点,请分享您的想法。感谢。