木偶骨干模型字段是否可以自动用于模板

时间:2013-10-15 19:38:56

标签: templates backbone.js models marionette

我有一个集合调用一个远程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对象的布局。我需要在上面的模板中显示“名称”,“描述”和“费用”。我可以将“价格”记录到控制台并显示为对象,但我不能单独列出“费用”字段......

2 个答案:

答案 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'] })
      }
    });

希望这有帮助