【问题标题】:Should marionette backbone model fields be automatically available for templates木偶骨干模型字段是否应自动可用于模板
【发布时间】:2013-10-15 19:38:55
【问题描述】:

我有一个调用远程 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'才能出现在上面的模板中。我可以将“价格”记录到控制台,它显示为一个对象,但我不能单独列出“成本”字段...

【问题讨论】:

  • 能否包含模板示例(特别是包含未呈现的字段)以及从服务器返回的 JSON 对象?
  • @ne8il - 刚刚编辑了上面的代码以反映所要求的代码,谢谢

标签: templates backbone.js models marionette


【解决方案1】:

http://jsbin.com/eHoPAri/1/edit?html,js,console,output

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

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

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

希望对你有帮助

【讨论】:

  • 感谢您如此详细的回复。这完美地工作。除非我设置默认值,否则我仍然无法显示字段:{name:“”,成本:“”},不知道为什么会这样,但如果我这样做,我现在可以(使用你的代码)得到JSON 对象中的嵌套数据。非常感谢...
【解决方案2】:

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

<%= name ? name : '' %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多