2015-12-02 4 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; 
    } 
}); 

Покушение Spacebar обозначения:

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

После выполнения этой нотации и глядя на консоли браузера, я получаю назад это: (что показывает, что длябыл принят только)

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

Я не верю, что можно пройти через JSON из spacebars. Строки, скаляры и имена переменных да (и переменные могут явно ссылаться на объекты). Счастлив быть доказанным, но просто не видел его. –

ответ

3

Вы почти получили это право, за исключением того, что вы не можете дать данные в виде массива яваскрипта, но нужно использовать строку 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

Вы не можете передать объект в #each в пробелах. Это должен быть массив. Это должно появиться на консоли.

Потому что Метеор включает символ подчеркивания, то, что вы часто проходите, это _.toArray(myObject).