1

在我的流星应用程序中,我有一个数据收集表单模板,如下所示:

<template name="IntroductionWizard_Step_1">
{{#with contributor}}
<div class="container">
  <div class="hero-unit">
    <h3 class="panel-title">Introduction Wizard Step 1: </h3>

    <form class="form-vertical" role="form">
      <label for="name" class="control-label"><h5 class="text-muted">Name</h5></label>
      <input type="text" id="name" name="name" class="form-control-element" value="{{contributorName}}" placeholder="Name">

      <label for="email" class="control-label">Email</label>
      <input type="text" id="email" name="email" class="form-control-element" value="{{contributorEmail}}" placeholder="Email">

      <label for="phone" class="control-label">Phone</label>
      <input type="text" id="phone" name="phone" class="form-control-element" value="{{contributorPhone}}" placeholder="phone #">

      <label for="orgRole" class="control-label">Org Role</label>
      <input type="text" id="orgRole" name="orgRole" class="form-control-element" value="{{contributorOrgRole}}" placeholder="Org Role">
    </form>

  </div>
</div>
{{/with}}
</template>

这个模板的助手看起来像这样:

Template["IntroductionWizard_Step_1"].helpers({
  contributor: function(n) {
    return ContributorCollection.findOne({contributorName: "Jim Szczygiel"});
  }
});

如果找到数据,则此帮助程序可以返回数据,或者不返回数据。目前,当返回数据时,它显示在这个表单中,但是,当没有返回数据时,这个页面显示为空 - 表单模板根本没有显示。即使没有返回数据,我应该怎么做才能仍然显示空模板表单?

4

3 回答 3

3

with就像一个if加号命名空间,所以你看到的是有道理的 - 整个表单将被有条件地删除。可能会起作用的只是删除with并为每个值使用全名。例如:

value="{{contributor.contributorName}}"

我只是做了一个小测试,发现即使contributor没有定义,它似乎也没有失败。

于 2014-04-10T03:51:21.663 回答
1

在这种情况下你能返回一个空字符串吗?如果fineOne 返回 undefined 它将返回""。有时在 Blaze 中返回 undefined 会使 Deps 崩溃,不确定是否仍然如此。

Template["IntroductionWizard_Step_1"].helpers({
  contributor: function(n) {
    return ContributorCollection.findOne({contributorName: "Jim Szczygiel"}) || "";
  }
});
于 2014-04-10T03:45:21.643 回答
1

这对您来说可能是一个简单的解决方案。要模拟您的模板助手不返回数据的情况,只需注释 return 语句。

HTML

<body>
  {{> IntroductionWizard_Step_1}}
</body>

<template name="IntroductionWizard_Step_1">
   <!-- if contributor is found ContributorTemplate is included with the returned object as data context -->
   {{#with contributor}}
       {{> ContributorTemplate}}
   {{/with}}

    <!-- if contributor is NOT found ContributorTemplate is included with an empty object as data context -->
   {{#unless contributor}}
       {{> ContributorTemplate}}
   {{/unless}}
</template>

<template name="ContributorTemplate">
  <input value="{{contributorName}}" placeholder="Name">
</template>

JS

if (Meteor.isClient) {
  Template.IntroductionWizard_Step_1.contributor = function () {
    return {contributorName:  "Jim Szczygiel"}; // comment this line to see effect!
  };
}

结果

使用返回的对象:

在此处输入图像描述

没有返回对象:

在此处输入图像描述

于 2014-04-10T09:45:00.200 回答