BackboneJS if else在模板中的条件

时间:2014-06-25 06:47:19

标签: javascript backbone.js underscore.js underscore.js-templating

我的BackboneJS模板中有以下代码(使用Underscore渲染)

<input type="radio" class="isMale" id="isMaleVolunteersNo" 
    <%= model.attributes.isMaleVolunteers == undefined ||         
        model.attributes.isMaleVolunteers == null || 
        model.attributes.isMaleVolunteers == 'N' ? 'checked' : '' 
     %>                 
     name="isMaleVolunteers" value="false" />
<label for="isMaleVolunteersNo" style="display:inline">No</label>

当模型属性isMaleVolunteers未定义时,我希望默认情况下检查No。

我尝试了以下(使用paranthesis)......仍然无效;

<input type="radio" class="isMale" id="isMaleVolunteersNo" 
    <%= (model.attributes.isMaleVolunteers == undefined ||
         model.attributes.isMaleVolunteers == null || 
         model.attributes.isMaleVolunteers == 'N') ? 'checked' : '' 
    %> 
    name="isMaleVolunteers" value="false" />
<label for="isMaleVolunteersNo" style="display:inline">No</label>

但上面的代码不起作用。代码有问题吗?

3 个答案:

答案 0 :(得分:4)

在下划线模板中,使用<% %>执行javascript代码。 <%= %>用于插入变量(短打印变量) 因此,您的代码应该类似于<input type="radio" <%if(condition){print('checked');}%> >

答案 1 :(得分:0)

试试这个:

<input type="radio" class="isMale" id="isMaleVolunteersNo" 
   <%= 
   !model.attributes.isMaleVolunteers  || model.attributes.isMaleVolunteers == 'N' 
   ? 'checked' 
   : '' %> 
   name="isMaleVolunteers" value="false" 
/>
<label for="isMaleVolunteersNo" style="display:inline">No</label>

答案 2 :(得分:0)

此外,由于你使用骨干模型,你不需要检查null或undefined,你可以只使用API​​方法model.has() - 所以在这种情况下代码可能看起来像这样

<input type="radio" <%= !!(model.has('isMaleVolunteersNo') && model.get('isMaleVolunteersNo') !== 'N') ? 'checked' : '' %> class="..." id="..." name="...">

根据经验,如果您必须手动访问model.attributes,那么您做错了。此外,一个好的做法是在将模型运行到模板之前将模型转换为JSON,因为这样可以更轻松地处理数据。