一尘不染

持久化和加载meta.js集合中的元数据

json

我遇到了使用骨干网.js的情况,那里有一组模型,以及一些有关模型的其他信息。例如,假设我要返回一个金额列表:它们具有与每个模型关联的数量。现在假设每个数量的单位总是相同的:说夸脱。然后,从服务中获取的json对象可能类似于:

{
    dataPoints: [
         {quantity: 5 },
         {quantity: 10 },
         ...
    ],
    unit : quarts
 }

现在,骨干集合没有将这种元数据与集合本地关联的真正机制,但有人向我提出了以下问题:在集合上设置属性-可以通过.meta(property,[value])样式函数扩展集合的骨干js-很好的解决方案。但是,自然地,我们希望能够像上面那样从json响应中干净地检索此数据。

Backbone.js为我们提供了该parse(response)功能,该功能使我们可以结合url属性指定从何处提取集合的模型列表。但是,我没有办法知道如何在不重载的情况下实现更智能的功能,fetch()这会删除已经可用的部分功能。

我的问题是:是否有比重载fetch()(并尝试将其称为超类实现)更好的选项来实现我想要的目标?

谢谢


阅读 311

收藏
2020-07-27

共1个答案

一尘不染

就我个人而言,我会将Collection另一个包装在其中Model,然后覆盖parse,如下所示:

var DataPointsCollection = Backbone.Collection.extend({ /* etc etc */ });
var CollectionContainer = Backbone.Model.extend({
    defaults: {
        dataPoints: new DataPointsCollection(),
        unit: "quarts"
    },
    parse: function(obj) {
        // update the inner collection
        this.get("dataPoints").refresh(obj.dataPoints);

        // this mightn't be necessary
        delete obj.dataPoints;

        return obj;
    }
});

Collection.refresh()调用将使用新值更新模型。meta按照先前的建议将自定义值传递给Collection可能会使您无法绑定到这些元值。

2020-07-27