{{#each}}块

时间:2017-12-21 00:17:01

标签: handlebars.js

我有一份“事项”清单。每件事都有一个_id和名字。

我有一个“交易”。每个事务都属于一个事物,通过transaction.matterId属性引用事物的_id。

我目前正在开发一个用户界面,允许对事务进行更改,包括更改事务所分配的事项。像这样:

Enter date:

Select a matter:  (this is the culprit)

Enter the amount:

我正在使用把手生成一个Bootstrap选择输入,其中包含每个问题的选项 - 即“选择一个问题......”这可以通过把手{{#each}}块助手轻松完成。所有事项都正确显示为选项,并正确分配每个选项的值。到目前为止没问题......

但是,我想要预先选择其值与transaction.MatterId匹配的选项,因为这是一个更新屏幕。为此,我在{{#each}}块中调用了我自定义的“IfEquals”帮助器。把手模板是这样的:

<div>Matter: {{ transaction.matterId}}</div>  <-- I can see the matterId here.
<div class='form-group'>
    <label for="selMatter">Case</label>
    <select required id="selMatter" name="matterId" class="form-control">
        {{# each matters }}
            <option value='{{ _id }}' {{ ifEqual _id ../transaction.matterId "selected" "" }} >{{ name }}</option>
        {{/ each }}
    </select>
</div>

自定义帮助程序是:

ifEqual: function (obj, value, trueString, falseString) {
        return ( (obj===value) ? trueString : falseString );
}

假设第一个<div>显示了一个transaction.MatterId为“5”。将有一个(且仅一个)选项,其值为“5”。

在把手模板中,我尝试了各种各样的可能性,试图让{{IfEqual}}正确地比较2个值。我尝试了没有“../”的transaction.matterId来查看它是否可能是一个上下文问题。没运气。我尝试使用把手子表达式(即使有自己的辅助函数)。不。

我没有在{{IfEqual}}帮助器中获得正确的值,因此,即使匹配的<option>存在,我也无法让把手为其添加“selected”属性。

以下是我认为适合观看的地方,但我没有看到我所缺少的东西。 http://handlebarsjs.com/expressions.html

1 个答案:

答案 0 :(得分:0)

嗯,我终于得到了它。如果有人遇到这种情况,那么这对我有用:

把手模板:

<div class='form-group'>
   <label for="selMatter">Case</label>
   <select required id="selMatter" name="matterId" class="form-control">
      {{# each matters }}
          {{{ makeOption _id ../transaction.matterId name }}}
      {{/ each }}
   </select>
</div>

这里是{{{makeOption}}}帮助者:

makeOption: function (optionValue, dataValue, displayText) {
    myOption = "<option value='" + optionValue  + "'";

    if ( optionValue.toString() === dataValue.toString() )
    myOption += " selected";

    myOption += ">" + displayText + "</option>";

    return myOption;
},