从路由参数提供动态模板的数据上下文

时间:2016-03-14 03:44:13

标签: meteor collections meteor-blaze

我的应用程序可能有数百种不同的表单(由用户创建)。

为了解决这个问题,我的计划是一系列表格,其中每个文件包括以下内容:

{
  formTitle: "form title goes here",
  version: 1.0,
  fieldsets: [
    {
      fieldsetTitle: "Personal information",
      introMessage: "Please provide your name and date of birth",
      inputs: [
        {
          label: "Full name",
          type: "text",
          placeholder: "John Doe"
        },
        {
          label: "Date of birth",
          type: "date",
          placeholder: "DD/MM/YYYY"
        }
      ]
    }
  ]

目前,我使用formName var包含我的blaze模板,如下所示:

  {{> form formName="form title goes here" }}

  Template.form.onCreated(function(){
      var thisFormName = this.data.formName; // this returns fine
      var thisForm = Forms.findOne({formName: thisFormName}); //also works fine
      console.log(thisForm); // prints the form document to console
  })

但我无法在我的模板中访问此数据。

 <template name="form">
      {{thisForm.formTitle}} // doesn't print the title and as such I cannot use the document within the template.
 </template>

由于这是模块的模板,我无法通过路由获取数据(据我所知)。

有没有人知道我错过了什么?

我确定它是在文档从集合中返回之前由于模板呈现而然而我不确定如何解决此问题(因为我无法使用路由等待)函数如waitOn)

先谢谢。

1 个答案:

答案 0 :(得分:1)

您需要为blaze创建数据上下文:

HTML:

["pc_0", "pc_1","pc_2"]

JS:

<template name="form">
  <!-- at this point the data context only includes 'data.formName' ->
  {{#with thisform data.formName}}
    {{this.formTitle}}
  {{/with}}
</template>

您的Template.form.helpers({ thisForm: function(name){ return Forms.findOne({formName: name}); } }); 代码只创建了两个局部变量,