【问题标题】:How to pass an array/objects with spacebars to a meteor template?如何将带有空格键的数组/对象传递给流星模板?
【发布时间】:2016-03-07 07:51:45
【问题描述】:

我正在尝试构建一个流星模板来简化在表单上创建单选按钮。我希望能够通过空格键将数组或对象作为参数传递给模板。如何将数组/对象作为参数传递,或者这是否可能?

模板:

<template name="radioButton">
  <div class="mdl-textfield mdl-js-textfield">{{radioLabel}}</div>
  {{#each getRadioOptions}}
  <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="{{radioOptionID}}">
    <input type="radio" id="{{radioOptionID}}" class="mdl-radio__button" name="{{radioID}}" value="{{optionID}}">
    <span class="mdl-radio__label">{{optionLabel}}</span>
  </label>
  {{/each}}
</template>

模板助手:

Template.radioButton.helpers({
    getRadioOptions: function () {
        console.log("getRadioOptions called");
        console.log(this);
        console.log(this.radioOptions);
        return this.radioOptions;
    },
    radioOptionID: function() {
        return this.radioID+"-"+this.optionID;
    }
});

尝试的空格符号:

{{> radioButton radioID="sampleID" radioLabel="Sample Radio Buttons"
    radioOptions=[{optionID:"option1",optionLabel:"Option One"},
                  {optionID:"option2",optionLabel:"Option Two"}] }}

在运行这个符号并查看浏览器控制台后,我得到了这个:(这表明只有null 被传递给radioOptions

getRadioOptions called
Object {radioID: "sampleID", radioLabel: "Sample Radio Buttons", radioOptions: null}
null

【问题讨论】:

  • 我不相信从空格键传递 json 是可能的。字符串、标量和变量名是的(并且变量显然可以引用对象)。很高兴被证明是错误的,但只是没有看到。

标签: templates meteor spacebars


【解决方案1】:

您几乎是对的,只是您不能将数据作为 javascript 数组提供但需要使用 JSON 字符串,即使用:

{{> radioButton radioID="sampleID" radioLabel="Sample Radio Buttons"
    radioOptions='[{"optionID":"option1", "optionLabel":"Option One"}, {"optionID":"option2","optionLabel":"Option Two"}]' }}

请注意,您还需要在字段名称周围使用引号,因为它是 JSON 而不是 javascript!

然后,在助手中,解析字符串:

    getRadioOptions: function () {
        console.log("getRadioOptions called");
        console.log(this.radioOptions);  // string
        return JSON.parse(this.radioOptions);  // array
    },

【讨论】:

    【解决方案2】:

    您不能在空格键中的#each 中传递对象。它必须是一个数组。这应该会出现在您的控制台中。

    因为 Meteor 包含下划线,所以你经常传递的是_.toArray( myObject )

    【讨论】:

      猜你喜欢
      • 2018-01-18
      • 2014-08-22
      • 2012-10-09
      • 1970-01-01
      • 2015-06-07
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      相关资源
      最近更新 更多