【问题标题】:How to handle custom response in Backbone model如何在 Backbone 模型中处理自定义响应
【发布时间】:2012-02-22 04:08:13
【问题描述】:

我开始在我的项目中集成骨干网。我遇到的第一个困难是来自后端的响应不是 JSON 数组或不是为骨干设计的。这是一个例子。

//A backbone model
var Person = Backbone.Model.extend({});

// A backbone collection
var PersonCollection = Backbone.Collection.extend({  
  model : Person,  
  url: '/people'
});

所以考虑一下,当我请求 /people 时,它​​不会返回 JSON 数组。相反,它返回类似:

{header: "some str", people: ["person", "array", ".."], stats: "something is here" }

它的问题是主干无法将此 JSON 响应分配给模型。是否有任何调整可以在控制器中进行响应。所以访问模型是正常的。 任何前/后挂钩。

仅供参考:主干正在从服务器获得响应,我可以在“responseText”键下看到它。

非常感谢任何帮助。

【问题讨论】:

    标签: javascript model-view-controller backbone.js


    【解决方案1】:

    Backbone 支持这一点。我在consuming data from Parse.com 时遇到了同样的问题。在您的情况下,当您有一个不返回数组的 /people 端点时,您可以覆盖 Collection.parse 函数以向 Backbone 展示如何找到它正在寻找的数组:

    var PersonCollection = Backbone.Collection.extend({
      model : Person,
      url: '/people',
      parse: function(resp, xhr) {
        this.header = resp.header;
        this.stats = resp.stats;
        return resp.people;
      }
    });
    

    如果您需要在此功能中做更多事情,那么您应该这样做。以类似的方式,您可以根据需要覆盖Model.sync

    【讨论】:

    • 感谢您的快速回复。但是标题和统计数据呢,它们会丢失吗?或者我可以将它们分配给控制器级别的属性(如果骨干中有这样的东西)。
    • 当然。您也可以始终将其保留在 parse 内部,例如 this.header = resp.headerthis.stats = resp.stats。我更新了我的答案以表明这一点。
    猜你喜欢
    • 2014-10-02
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多