【问题标题】:How to call a custom JSON request, then build a collection of models from that, using Backbone.js?如何调用自定义 JSON 请求,然后使用 Backbone.js 构建模型集合?
【发布时间】:2013-08-14 05:31:15
【问题描述】:

我是 Backbone.js 的新手,一直试图理解三件事: 1) 如何以及在何处调用自定义 JSON 请求? 2) 如何将该 JSON 请求转换为模型? 3) 如何创建这些模型的集合?

我的 JSON 看起来像这样:

{"flavor": "vanilla", 
 "message": "ok", 
 "count": 10,
 "rows": [{"data":["this", "is", "123", "something"],
           "moreData": "more stuff here",
           "moreInfo": "more info here"},
          {"data":["even", "more", "456", "something"],
           "moreData": "even more stuff here",
           "moreInfo": "even more info here"},
          {"data":["it", "doesn't", "123", "end"],
           "moreData": "more and more stuff here",
           "moreInfo": "more and more info here"}]
}

我想让每个“数据”成为一个项目。我想要一个包含许多项目的列表。

我必须发出自定义 JSON 请求(而不是通过 $.ajax 或类似的东西 - 它位于必须通过特定函数调用的单独库中,提供回调选项) - 我是否进行此调用在 Backbone.Model 或 Backbone.View 中?

基本上,我将获得的 JSON 响应格式不在我的控制范围内,因此上面的示例很混乱。作为奖励,我想将其中的一些 JSON 格式化为更好的属性。我希望在 Item 模型中做到这一点。

如何将该请求转换为模型?如果我必须修改某些属性?

如何创建这些模型的集合?到目前为止我有

    var ItemList = Backbone.Model.extend({

    })

    var ItemLists = Backbone.Collection.extend({

      model: ItemList,

    });

    var ItemView = Backbone.View.extend({

      el: $("#dashboard"),

      template: _.template($("#item-template")),

      initialize: function(){
        this.render();
      },

      render: function(){
        var item = new Item();
        var content = this.template(item);
        $(this.el).html(content);
      }
    }); 

请帮助,任何 Backbone.js 专家。对于有经验的人来说,这应该是一个相对简单的问题!

【问题讨论】:

    标签: backbone.js


    【解决方案1】:
    var ItemList = Backbone.Model.extend({
        parse: function(response) {
            // response = {"data":["this", "is", "123", "something"],
            // "moreData": "more stuff here",
            // "moreInfo": "more info here"}
            // You can make additional changes here
            return response;
        }
    });
    
    var ItemLists = Backbone.Collection.extend({
    
      model: ItemList,
      parse: function(response) {
          return response.rows;
      }
    
    });
    

    这就是你的想法吗?这需要rows 并将每个都变成ItemList。如果需要,您可以在解析中进行其他操作。然后你可以设置url并使用fetch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 2011-10-31
      • 1970-01-01
      相关资源
      最近更新 更多