把手,访问每个循环变量的父级

时间:2018-09-02 09:46:16

标签: javascript html node.js handlebars.js

我有这样的代码。我想将每个循环的前一个输入名称设置为@index。

我可以以某种方式访问​​@previousIndex吗?还是可以将输入分配给每个在第二次循环之前创建的组,这些组将在内部设置所有输入名称?

我收到的数据:

 questions:[  
  {  
     question:"How old are you?",
     answers:[  
        '16',
        '18',
        '20',
        '25',
        'other'
     ]
  },
  {  
     question:"How many kids do you have?",
     answers:[  
        '0',
        '1',
        '2',
        'other'
     ]
  }
]

hbs代码:

{{#each questions}}
    <li>
        <h3 class='question'>{{this.question}}</h2>
        <div class='flexbox'>
            {{#each this.answers}}
            <label class="container">
                <input type='radio' name='{{@previousIndex}}' value='{{@index}}'>  
                <span class='checkmark'>{{this}}</span>
            </label>              
            {{/each}}
        </div>
    </li>
{{/each}}

3 个答案:

答案 0 :(得分:2)

使用#each时,您会在@index中获得索引,如果要获得previousIndex,为什么不这样做parseInt(@index) - 1

这是您的操作方式:

var Handlebars = require('handlebars');

Handlebars.registerHelper("previous", function(value, options)
{
    return parseInt(value) - 1;
});

现在将您的hbs代码更新为:

{{#each questions}}
    <li>
        <h3 class='question'>{{this.question}}</h2>
        <div class='flexbox'>
            {{#each this.answers}}
            <label class="container">
                <input type='radio' name='{{previous @index}}' value='{{@index}}'>  
                <span class='checkmark'>{{this}}</span>
            </label>              
            {{/each}}
        </div>
    </li>
{{/each}}

希望这对您有用!

答案 1 :(得分:1)

我无法为您提供100%的工作代码(当前未设置环境),但是根据我以前对车把的经验,我将尝试为您提供可行的解决方案。

{{assign "previousIndex" 0}}
{{#each questions}}
    <li>
        <h3 class='question'>{{this.question}}</h2>
        <div class='flexbox'>
            {{#each this.answers}}
            <label class="container">
                <input type='radio' name='{{../previousIndex}}' value='{{@index}}'>  
                <span class='checkmark'>{{this}}</span>
            </label>              
            {{/each}}
        </div>
    </li>
    {{assign "../previousIndex" "{{@index}}"}}
{{/each}}

答案 2 :(得分:0)

我不得不像这里创建两个辅助函数。 Get在这里是因为我无法通过简单地编写{{myVariableName}}来直接从.hbs文件访问变量。 Hbs文件现在看起来像这里。

<div class='flexbox'>
            {{assign "parentIndex" @index }}
            {{#each this.answers}}
            <label class="container">
                <input type='radio' name='{{get "parentIndex"}}' value='{{@index}}'>  
                <span class='checkmark'>{{this}}</span>
            </label>              
            {{/each}}
        </div>

助手

assign: function(varName, varValue, options) {
    options.data.root[varName] = varValue;
}

get: function(varName, options) {
    return options.data.root[varName]
}