我有一个集合调用一个远程REST服务器并获取一个包含数组字段的JSON对象。我通过集合在每次迭代时调用我的模型,我可以在我的模板中获取一个要渲染的字段。事情变得奇怪......
如果我在模板中执行以下操作:
<%= name %>
我可以输出名称字段。但是,除非我在模型的开头创建一些默认值,否则任何其他字段都不会呈现:
defaults: {
name: '',
phone: '',
age: ''
}
所以,如果我包含这个,我可以渲染这些字段。我是否应该在模型上使用它来使用它的字段?
...按照n8eil的要求
模板:
<script type="text/template" id="pos-list-item">
<%= name %>, <%= description %>, <%= cost %>
</script>
JSON对象:
{
"itemCount": 3,
"items": [
{
"uri": "/item/1234",
"name": "Soda Drink",
"description": "A fizzy drink",
"price": [
{
"costType": "A",
"cost": 3.5
}
],
"live": true,
"created": "2013-10-07 18:22:29"
},
{
"uri": "/item/12345",
"name": "Choco bar",
"description": "A nice snack",
"price": [
{
"costType": "B"
"cost": 1.75
}
],
"live": true,
"created": "2013-10-07 18:22:29"
}
]
}
为项目隐私更改了一些数据,但这实际上是JSON对象的布局。我需要在上面的模板中显示“名称”,“描述”和“费用”。我可以将“价格”记录到控制台并显示为对象,但我不能单独列出“费用”字段......
答案 0 :(得分:0)
是的,渲染该模板时必须存在该字段。但是,您可以修改模板,而不必包含默认值:
<%= name ? name : '' %>
答案 1 :(得分:0)
http://jsbin.com/eHoPAri/1/edit?html,js,console,output
我继续为这些数据嘲笑了一些木偶结构,不确定它们是否接近你正在做的事情。我需要为模板更改的唯一方法是'cost'位于'price'数组内的对象内,因此您需要通过'price[0].cost
'引用它。否则,您不应该在模型上使用默认属性以便在模板中呈现它们,但如果您尝试引用模型上未找到的属性,则会出现错误。
您还可以设置一个方法,在模型加载时为模型添加'cost'属性,这样您就不必从数组中引用它:
var itemModel = Backbone.Model.extend({
parse : function(response, options){
return _.extend(response, { 'cost' : response['price'][0]['cost'] })
}
});
希望这有帮助