0

我有一个调用远程 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 对象的布局。我需要'name'、'description'和'cost'才能出现在上面的模板中。我可以将“价格”记录到控制台,它显示为一个对象,但我无法挑出“成本”字段......

4

2 回答 2

0

是的,渲染该模板时该字段必须存在。但是,您可以修改模板而不必包含默认值:

<%= name ? name : '' %>
于 2013-10-15T21:19:43.180 回答
0

http://jsbin.com/eHoPAri/1/edit?html,js,控制台,输出

我继续为这些数据模拟了一些 Marionette 结构,不确定它们是否接近你正在做的事情。我需要为模板更改的唯一一件事是“成本”位于“价格”数组中的一个对象内,因此您需要通过“ price[0].cost”来引用它。否则不,您不应该需要模型上的默认属性才能在模板中呈现它们,但是如果您尝试引用模型上未找到的属性,则会收到错误消息。

您还可以在模型加载时添加一个“成本”属性的方法,这样您就不必从数组中引用它:

    var itemModel = Backbone.Model.extend({
      parse : function(response, options){
         return _.extend(response, { 'cost' : response['price'][0]['cost'] })
      }
    });

希望这可以帮助

于 2013-10-16T03:07:46.813 回答