如何在Underscore Java脚本模板中显示嵌套属性

时间:2013-09-06 15:57:20

标签: backbone.js underscore.js jquery-templates

我有一个骨干模型营养品,它包含数量,百分比和测量单位。例如

var nut = Backbone.Model.extend({
defaults: {
    quantity: '0',
    percent: 0,
    uom: 'g',
}
});

我还有另一种含有产品全营养成分的模型

var nutrition = Backbone.Model.extend({
defaults:{
servingSize: new nut(),
calories: new nut(),
caloriesFromFat: new nut(),
totalFat: new nut(),
saturatedFat: new nut(),
cholesterol: new nut(),
sodium: new nut(),
totalCarbohydrate: new nut(),
dietaryFiber: new nut(),
sugars: new nut(),
protein: new nut(),
vitaminA: new nut(),
vitaminC: new nut(),
calcium: new nut(),
iron: new nut(),    
},
});

但是当我通过将营养模型传递到下划线模板来打印营养时,我看到未定义。是下划线不支持嵌套属性吗?

<tr>
<td><strong>Total Fat <%=totalFat.quantity%> <%=totalFat.uom%></strong></td>
<td class="dv"><%=totalFat.percent+'%'%></td>
</tr>
<tr>
 <td class="sub">Saturated Fat <%=saturatedFat.quantity%> <%=saturatedFat.uom%></td>
 <td class="dv"><%=saturatedFat.percent+'%'%></td>
 </tr>

感谢。

2 个答案:

答案 0 :(得分:1)

您需要将nutrition.toJSON()_.clone(nutrition.attributes)传递给模板。

否则,您将获得模型对象,而不是原始数据。

要获取每个子属性,您可以通过嵌套属性进行递归以直接公开它们。否则,您可以通过attributes对象直接访问它们。例如cholesterol.attributes.<attr>

答案 1 :(得分:1)

Backbone模型的属性不能直接在对象本身上访问。你应该使用

<%= totalFat.attributes.quantity %>