2015-12-02 55 views
1

我正在嘗試構建一個流星模板,用於簡化在窗體上創建單選按鈕。我希望能夠通過空格鍵將數組或對象作爲參數傳遞給模板。我如何傳遞一個數組/對象作爲參數,或者這甚至可能?如何將具有空格鍵的數組/對象傳遞給流星模板?

模板:

<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 
+0

,我不相信這是可能從spacebars通過傳遞JSON。字符串,標量和變量名是(變量可以很明顯地引用對象)。很高興被證明是錯誤的,但沒有看到它。 –

回答

3

你幾乎得到它的權利,但你不能給的數據作爲一個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 
    }, 
0

您無法在spacebars中的#each中傳遞對象。它必須是一個數組。這應該出現在您的控制檯中。

因爲Meteor包含下劃線,所以你經常通過的是_.toArray(myObject)